
Simple and easy go web micro framework
Important: Now need go1.9+ version support, and support go mod.
Document: https://www.kancloud.cn/devfeel/dotweb/346608
Guide: 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 | Memory | Samples | Average | Median | 90%Line | 95%Line | 99%Line | Min | Max | Error% | Throughput | Received KB/Sec | Send 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 |
| ECHO | 1.9.2 | 16core16G | |||||||||||
| cpu | Memory | Samples | Average | Median | 90%Line | 95%Line | 99%Line | Min | Max | Error% | Throughput | Received KB/Sec | Send 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 | Memory | Samples | Average | Median | 90%Line | 95%Line | 99%Line | Min | Max | Error% | Throughput | Received KB/Sec | Send 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 ) boolAccepts two parameters, one is the URI path and the other is the HttpHandle type, setting the method to execute when matching the path;
Static routing syntax means that there are no parameter variables, pattern is a fixed string.
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 )
}test: curl http://127.0.0.1/hello
Parameter routing is followed by a string as the parameter name. You can get the value of the routing parameter through the GetRouterName method of 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 )
} test:
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 ) test:
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.EnabledSession
Set whether to enable Session support. Currently, it supports runtime and redis modes, and it is not enabled by default.
HttpServer.EnabledGzip
Set whether to enable Gzip support, it will not be enabled by default
HttpServer.EnabledListDir
Set whether to enable directory browsing, it is only valid for Router.ServerFile. If you set this item, you can browse directory files, and it is not enabled by default.
HttpServer.EnabledAutoHEAD
Set whether to automatically enable Head routing. If this item is set, HEAD routes will be added by default for all routing methods except WebsocketHEAD. Non-development mode will not be enabled by default.
HttpServer.EnabledAutoOPTIONS
Set whether to automatically enable Options routing. If this item is set, OPTIONS routing will be added by default for all routing methods except WebsocketHEAD. Non-development mode will not be enabled by default.
HttpServer.EnabledIgnoreFavicon
Set whether to ignore Favicon's request, generally used in interface projects
HttpServer.EnabledDetailRequestData
Set whether to enable detailed request data statistics, default is false. If this item is set, the statistics of DetailRequestUrlData in ServerStateInfo will be enabled.
HttpServer.EnabledTLS
Set whether to enable TLS encryption processing
HttpServer.EnabledIgnoreFavicon
Set whether to ignore favicon response, default is false. If this item is set, the integrated IgnoreFaviconModule will be registered by default and executed before the route takes effect.
HttpServer.EnabledBindUseJsonTag
Set whether to enable the json tag to be effective on the Bind interface, default is false. If this item is set, the json tag will be checked when Bind is executed.
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
dependency now managed by go mod.
Project introduction: http long connection gateway service, providing Websocket and long polling services
Project introduction: A go blog program based on dotweb and mapper
Project introduction: A go Blog (blog) server based on dotweb
Project introduction: token service, providing token consistency services and related global ID generation services, etc.
Project introduction: WeChat Access Token central control server is used to uniformly manage access_tokens of various public accounts, and provide a unified interface for obtaining and automatically refreshing Access Tokens.
Project introduction: Comprehensive project templates based on dotweb, dotlog, mapper, dottask, cache, and database.