
Kerangka Mikro Web Sederhana dan Mudah
PENTING: Sekarang butuh dukungan versi Go1.9+, dan dukungan Go Mod.
Dokumen: https://www.kancloud.cn/devfeel/dotweb/346608
Panduan: https://github.com/devfeel/dotweb/blob/master/docs/guide.md
go get github.com/devfeel/dotweb
package main
import (
"fmt"
"github.com/devfeel/dotweb"
)
func main () {
//init DotApp
app := dotweb . New ()
//set log path
app . SetLogPath ( "/home/logs/wwwroot/" )
//set route
app . HttpServer . GET ( "/index" , func ( ctx dotweb. Context ) error {
return ctx . WriteString ( "welcome to my first web!" )
})
//begin server
fmt . Println ( "dotweb.StartServer begin" )
err := app . StartServer ( 80 )
fmt . Println ( "dotweb.StartServer error => " , err )
}| Dotweb | 1.9.2 | 16Core16G | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CPU | Ingatan | Sampel | Rata-rata | Median | Garis 90% | Garis 95% | Garis 99% | Min | Max | Kesalahan% | Throughput | Menerima KB/Sec | Kirim KB/Sec |
| 40% | 39m | 15228356 | 19 | 4 | 43 | 72 | 204 | 0 | 2070 | 0,00% | 48703.47 | 7514.79 | 8656.28 |
| 40% | 42m | 15485189 | 18 | 4 | 41 | 63 | 230 | 0 | 3250 | 0,00% | 49512.99 | 7639.7 | 8800.16 |
| 40% | 44m | 15700385 | 18 | 3 | 41 | 64 | 233 | 0 | 2083 | 0,00% | 50203.32 | 7746.22 | 8922.86 |
| GEMA | 1.9.2 | 16Core16G | |||||||||||
| CPU | Ingatan | Sampel | Rata-rata | Median | Garis 90% | Garis 95% | Garis 99% | Min | Max | Kesalahan% | Throughput | Menerima KB/Sec | Kirim KB/Sec |
| 38% | 35m | 15307586 | 19 | 4 | 44 | 76 | 181 | 0 | 1808 | 0,00% | 48951.22 | 6166.71 | 9034.94 |
| 36% | 35m | 15239058 | 19 | 4 | 45 | 76 | 178 | 0 | 2003 | 0,00% | 48734.26 | 6139.37 | 8994.9 |
| 37% | 37m | 15800585 | 18 | 3 | 41 | 66 | 229 | 0 | 2355 | 0,00% | 50356.09 | 6343.68 | 9294.24 |
| Gin | 1.9.2 | 16Core16G | |||||||||||
| CPU | Ingatan | Sampel | Rata-rata | Median | Garis 90% | Garis 95% | Garis 99% | Min | Max | Kesalahan% | Throughput | Menerima KB/Sec | Kirim KB/Sec |
| 36% | 36m | 15109143 | 19 | 6 | 44 | 71 | 175 | 0 | 3250 | 0,00% | 48151.87 | 5877.91 | 8746.33 |
| 36% | 40m | 15255749 | 19 | 5 | 43 | 70 | 189 | 0 | 3079 | 0,00% | 48762.53 | 5952.45 | 8857.25 |
| 36% | 40m | 15385401 | 18 | 4 | 42 | 66 | 227 | 0 | 2312 | 0,00% | 49181.03 | 6003.54 | 8933.27 |
Router . GET ( path string , handle HttpHandle )
Router . POST ( path string , handle HttpHandle )
Router . HEAD ( path string , handle HttpHandle )
Router . OPTIONS ( path string , handle HttpHandle )
Router . PUT ( path string , handle HttpHandle )
Router . PATCH ( path string , handle HttpHandle )
Router . DELETE ( path string , handle HttpHandle )
Router . HiJack ( path string , handle HttpHandle )
Router . WebSocket ( path string , handle HttpHandle )
Router . Any ( path string , handle HttpHandle )
Router . RegisterRoute ( routeMethod string , path string , handle HttpHandle )
Router . RegisterHandler ( name string , handler HttpHandle )
Router. GetHandler ( name string ) ( HttpHandle , bool )
Router . MatchPath ( ctx Context , routePath string ) boolMenerima dua parameter, satu adalah jalur URI dan yang lainnya adalah tipe HTTPHANDLE, mengatur metode untuk dieksekusi saat mencocokkan jalur;
Sintaks routing statis berarti bahwa tidak ada variabel parameter, pola adalah string tetap.
package main
import (
"github.com/devfeel/dotweb"
)
func main () {
dotapp := dotweb . New ()
dotapp . HttpServer . GET ( "/hello" , func ( ctx dotweb. Context ) error {
return ctx . WriteString ( "hello world!" )
})
dotapp . StartServer ( 80 )
}Tes: Curl http://127.0.0.1/hello
Routing parameter diikuti oleh string sebagai nama parameter. Anda bisa mendapatkan nilai parameter perutean melalui metode getRoubername dari httpcontext.
package main
import (
"github.com/devfeel/dotweb"
)
func main () {
dotapp := dotweb . New ()
dotapp . HttpServer . GET ( "/hello/:name" , func ( ctx dotweb. Context ) error {
return ctx . WriteString ( "hello " + ctx . GetRouterName ( "name" ))
})
dotapp . HttpServer . GET ( "/news/:category/:newsid" , func ( ctx dotweb. Context ) error {
category := ctx . GetRouterName ( "category" )
newsid := ctx . GetRouterName ( "newsid" )
return ctx . WriteString ( "news info: category=" + category + " newsid=" + newsid )
})
dotapp . StartServer ( 80 )
} tes:
Curl http://127.0.0.1/hello/devfeel
Curl http://127.0.0.1/hello/category1/1
g := server . Group ( "/user" )
g . GET ( "/" , Index )
g . GET ( "/profile" , Profile ) tes:
Curl http://127.0.0.1/user
Curl http://127.0.0.1/user/profile
type UserInfo struct {
UserName string `form:"user"`
Sex int `form:"sex"`
}
func TestBind ( ctx dotweb. HttpContext ) error {
user := new ( UserInfo )
if err := ctx . Bind ( user ); err != nil {
return ctx . WriteString ( "err => " + err . Error ())
} else {
return ctx . WriteString ( "TestBind " + fmt . Sprint ( user ))
}
} app . Use ( NewAccessFmtLog ( "app" ))
func InitRoute ( server * dotweb. HttpServer ) {
server . GET ( "/" , Index )
server . GET ( "/use" , Index ). Use ( NewAccessFmtLog ( "Router-use" ))
g := server . Group ( "/group" ). Use ( NewAccessFmtLog ( "group" ))
g . GET ( "/" , Index )
g . GET ( "/use" , Index ). Use ( NewAccessFmtLog ( "group-use" ))
}
type AccessFmtLog struct {
dotweb. BaseMiddlware
Index string
}
func ( m * AccessFmtLog ) Handle ( ctx dotweb. Context ) error {
fmt . Println ( time . Now (), "[AccessFmtLog " , m . Index , "] begin request -> " , ctx . Request . RequestURI )
err := m . Next ( ctx )
fmt . Println ( time . Now (), "[AccessFmtLog " , m . Index , "] finish request " , err , " -> " , ctx . Request . RequestURI )
return err
}
func NewAccessFmtLog ( index string ) * AccessFmtLog {
return & AccessFmtLog { Index : index }
}Httpserver.enabledSesi
Tetapkan apakah akan mengaktifkan dukungan sesi. Saat ini, ia mendukung mode runtime dan redis, dan tidak diaktifkan secara default.
Httpserver.enabledgzip
Tetapkan apakah akan mengaktifkan dukungan GZIP, itu tidak akan diaktifkan secara default
Httpserver.enabledlistdir
Tetapkan apakah akan mengaktifkan browsing direktori, itu hanya berlaku untuk router.serverfile. Jika Anda mengatur item ini, Anda dapat menelusuri file direktori, dan tidak diaktifkan secara default.
Httpserver.enabledautohead
Tetapkan apakah akan secara otomatis mengaktifkan perutean kepala. Jika item ini diatur, rute head akan ditambahkan secara default untuk semua metode routing kecuali Websocket head. Mode non-pengembangan tidak akan diaktifkan secara default.
Httpserver.enabledautooptions
Tetapkan apakah akan secara otomatis mengaktifkan routing opsi. Jika item ini diatur, routing opsi akan ditambahkan secara default untuk semua metode routing kecuali WebSocket head. Mode non-pengembangan tidak akan diaktifkan secara default.
Httpserver.enabledignorefavicon
Tetapkan apakah akan mengabaikan permintaan Favicon, umumnya digunakan dalam proyek antarmuka
Httpserver.enabledDetailRequestData
Tetapkan apakah akan mengaktifkan statistik data permintaan terperinci, default salah. Jika item ini ditetapkan, statistik detailRequesturldata di serverstateInfo akan diaktifkan.
Httpserver.enabledtls
Tetapkan apakah akan mengaktifkan pemrosesan enkripsi TLS
Httpserver.enabledignorefavicon
Tetapkan apakah akan mengabaikan respons Favicon, default salah. Jika item ini ditetapkan, IgnorefaviconModule terintegrasi akan didaftarkan secara default dan dieksekusi sebelum rute berlaku.
Httpserver.enabledbinduseJsontag
Tetapkan apakah akan mengaktifkan tag JSON efektif pada antarmuka BIND, default salah. Jika item ini diatur, tag JSON akan diperiksa saat BIND dieksekusi.
type ExceptionHandle func ( Context , error ) type NotFoundHandle func (http. ResponseWriter , * http. Request ) WebSocket - golang.org/x/net/websocket
Redis - github.com/garyburd/redigo
yaml - gopkg.in/yaml.v2
Ketergantungan sekarang dikelola oleh Go Mod.
PENDAHULUAN PROYEK: Layanan Gateway HTTP Long Connection, Menyediakan Websocket dan Layanan Polling Panjang
PENDAHULUAN PROYEK: Program blog go berdasarkan dotweb dan mapper
PENDAHULUAN PROYEK: Server Blog (Blog) GO berdasarkan dotweb
Pendahuluan Proyek: Layanan Token, Menyediakan Layanan Konsistensi Token dan Layanan Pembuatan ID Global Terkait, dll.
PENDAHULUAN PROYEK: WeChat Access Token Central Control Server digunakan untuk mengelola Access_Tokens dari berbagai akun publik secara seragam, dan menyediakan antarmuka terpadu untuk mendapatkan dan secara otomatis menyegarkan token akses.
PENDAHULUAN PROYEK: Templat proyek yang komprehensif berdasarkan dotweb, dotlog, mapper, dottask, cache, dan basis data.