
Einfacher und einfacher Web -Micro -Framework
WICHTIG: NOWENDE GO1.9+ VERSIONS -Support und Support Go Mod.
Dokument: https://www.kancloud.cn/devfeel/dotweb/346608
Handbuch: 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 | Erinnerung | Proben | Durchschnitt | Mittlere | 90%Linie | 95%Linie | 99%Linie | Min | Max | Fehler% | Durchsatz | KB/Sek | Senden Sie KB/Sek |
| 40% | 39m | 15228356 | 19 | 4 | 43 | 72 | 204 | 0 | 2070 | 0,00% | 48703.47 | 7514.79 | 8656.28 |
| 40% | 42 m | 15485189 | 18 | 4 | 41 | 63 | 230 | 0 | 3250 | 0,00% | 49512.99 | 7639.7 | 8800.16 |
| 40% | 44 m | 15700385 | 18 | 3 | 41 | 64 | 233 | 0 | 2083 | 0,00% | 50203.32 | 7746.22 | 8922.86 |
| ECHO | 1.9.2 | 16CORE16G | |||||||||||
| CPU | Erinnerung | Proben | Durchschnitt | Mittlere | 90%Linie | 95%Linie | 99%Linie | Min | Max | Fehler% | Durchsatz | KB/Sek | Senden Sie KB/Sek |
| 38% | 35 m | 15307586 | 19 | 4 | 44 | 76 | 181 | 0 | 1808 | 0,00% | 48951.22 | 6166.71 | 9034.94 |
| 36% | 35 m | 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 | Erinnerung | Proben | Durchschnitt | Mittlere | 90%Linie | 95%Linie | 99%Linie | Min | Max | Fehler% | Durchsatz | KB/Sek | Senden Sie KB/Sek |
| 36% | 36 m | 15109143 | 19 | 6 | 44 | 71 | 175 | 0 | 3250 | 0,00% | 48151.87 | 5877.91 | 8746.33 |
| 36% | 40 m | 15255749 | 19 | 5 | 43 | 70 | 189 | 0 | 3079 | 0,00% | 48762.53 | 5952.45 | 8857.25 |
| 36% | 40 m | 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 ) boolAkzeptiert zwei Parameter, einer ist der URI -Pfad und der andere ist der Httphandle -Typ und setzt die Methode zum Ausführen bei der Übereinstimmung mit dem Pfad ein.
Statische Routing -Syntax bedeutet, dass es keine Parametervariablen gibt, Muster ist eine feste Zeichenfolge.
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
Nach dem Parameter -Routing folgt eine Zeichenfolge als Parametername. Sie können den Wert des Routing -Parameters über die GetRoutername -Methode von httpcontext erhalten.
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 )
} prüfen:
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 ) prüfen:
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
Stellen Sie fest, ob Sie die Sitzungsunterstützung aktivieren möchten. Derzeit unterstützt es Laufzeit- und Redis -Modi und ist standardmäßig nicht aktiviert.
Httpserver.Enabledgzip
Stellen Sie fest, ob die Unterstützung von GZIP aktiviert werden soll, er wird standardmäßig nicht aktiviert
Httpserver.enabledListdir
Legen Sie fest, ob das Durchsuchen von Verzeichnissen aktiviert werden soll. Es gilt nur für Router.Serverfile. Wenn Sie dieses Element festlegen, können Sie Verzeichnisdateien durchsuchen und es ist standardmäßig nicht aktiviert.
Httpserver.EnabledAutohead
Stellen Sie fest, ob automatisch das Kopfrouting aktiviert werden soll. Wenn dieses Element festgelegt ist, werden die Kopfrouten standardmäßig für alle Routing -Methoden mit Ausnahme von WebSocket Head hinzugefügt. Der Nichtentwicklungsmodus wird standardmäßig nicht aktiviert.
Httpserver.EnabledAutoopions
Stellen Sie fest, ob das Routing der Optionen automatisch aktiviert werden soll. Wenn dieses Element festgelegt ist, werden für alle Routing -Methoden mit Ausnahme von WebSocket Head standardmäßig Optionen Routing hinzugefügt. Der Nichtentwicklungsmodus wird standardmäßig nicht aktiviert.
Httpserver.enabledignorefavicon
Stellen Sie fest, ob die Anfrage von Favicon ignoriert werden soll, die im Allgemeinen in Schnittstellenprojekten verwendet werden
Httpserver.EnabledDetailRequestData
Legen Sie fest, ob detaillierte Anforderungsdatenstatistiken aktiviert werden sollen, der Standard ist falsch. Wenn dieses Element festgelegt ist, wird die Statistik von DetailRequesturldata in ServerStateInfo aktiviert.
Httpserver.enabledtls
Stellen Sie fest, ob die TLS -Verschlüsselungsverarbeitung aktiviert werden soll
Httpserver.enabledignorefavicon
Legen Sie fest, ob die Favicon -Antwort ignoriert werden soll, der Standard ist falsch. Wenn dieses Element festgelegt ist, wird die integrierte IgnorefaviconModule standardmäßig registriert und vor der Wirkung der Route ausgeführt.
Httpserver.EnabledBindusejSontag
Stellen Sie fest, ob das JSON -Tag aktiviert werden soll, um an der Bind -Schnittstelle effektiv zu sein, Standardeinstellung ist falsch. Wenn dieses Element festgelegt ist, wird das JSON -Tag überprüft, wenn Bind ausgeführt wird.
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
Abhängigkeit jetzt von Go Mod verwaltet.
Projekteinführung: HTTP Long Connection Gateway -Service, die WebSocket- und Long Polling Services bietet
Projekteinführung: Ein Go -Blog -Programm basierend auf DotWeb und Mapper
Projekteinführung: Ein Go -Blog (Blog) Server basierend auf DotWeb
Projekteinführung: Token -Service, Bereitstellung von Token -Konsistenzdiensten und zugehörigen globalen ID -Generierungsdiensten usw.
Projekteinführung: WeChat Access Token Central Control Server wird verwendet, um access_tokens verschiedener öffentlicher Konten einheitlich zu verwalten und eine einheitliche Schnittstelle zum Erhalten und automatisch Aktualisieren von Zugriffstoken bereitzustellen.
Projekteinführung: Umfassende Projektvorlagen basierend auf DotWeb, Dotlog, Mapper, Dottask, Cache und Datenbank.