
Micro marco de Web Simple and Fácil Go
IMPORTANTE: Ahora necesita soporte de versión GO1.9+, y soporte GO Mod.
Documento: https://www.kancloud.cn/devfeel/dotweb/346608
Guía: 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 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| UPC | Memoria | Muestras | Promedio | Mediana | 90%de línea | 95%de línea | 99%de línea | Mínimo | Máximo | Error% | Rendimiento | Recibió KB/seg | Enviar 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 |
| ECO | 1.9.2 | 16core16g | |||||||||||
| UPC | Memoria | Muestras | Promedio | Mediana | 90%de línea | 95%de línea | 99%de línea | Mínimo | Máximo | Error% | Rendimiento | Recibió KB/seg | Enviar 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 |
| Ginebra | 1.9.2 | 16core16g | |||||||||||
| UPC | Memoria | Muestras | Promedio | Mediana | 90%de línea | 95%de línea | 99%de línea | Mínimo | Máximo | Error% | Rendimiento | Recibió KB/seg | Enviar 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 ) boolAcepta dos parámetros, uno es la ruta URI y la otra es el tipo Httphandle, que establece el método para ejecutar al coincidir la ruta;
La sintaxis de enrutamiento estático significa que no hay variables de parámetros, el patrón es una cadena fija.
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 )
}Prueba: curl http://127.0.0.1/hello
El enrutamiento de parámetros es seguido por una cadena como nombre del parámetro. Puede obtener el valor del parámetro de enrutamiento a través del método getRouTername de 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 )
} prueba:
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 ) prueba:
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
Establezca si habilita el soporte de la sesión. Actualmente, es compatible con los modos de tiempo de ejecución y redis, y no está habilitado de forma predeterminada.
Httpserver.enabledgzip
Establecer si habilita el soporte de GZIP, no se habilitará de forma predeterminada
Httpserver.enabledListDir
Establezca si habilita la navegación de directorio, solo es válido para enrutador.serverfile. Si establece este elemento, puede explorar archivos de directorio y no está habilitado de forma predeterminada.
Httpserver.enabledAutohead
Establezca si habilita automáticamente el enrutamiento de la cabeza. Si este elemento está configurado, las rutas de cabeza se agregarán de forma predeterminada para todos los métodos de enrutamiento, excepto WebSocket Head. El modo no de desarrollo no se habilitará de forma predeterminada.
Httpserver.enabledAuToUptions
Establezca si habilita automáticamente el enrutamiento de opciones. Si este elemento está configurado, el enrutamiento de opciones se agregará de forma predeterminada para todos los métodos de enrutamiento, excepto WebSocket Head. El modo no de desarrollo no se habilitará de forma predeterminada.
Httpserver.enabledignorefavicon
Establezca si ignorar la solicitud de Favicon, generalmente utilizada en proyectos de interfaz
Httpserver.enabledDetailRequestData
Establecer si habilita las estadísticas de datos de solicitud detalladas, el valor predeterminado es falso. Si se establece este elemento, se habilitarán las estadísticas de Dellrequesturldata en ServerStateInfo.
Httpserver.enabledTLS
Establecer si habilita el procesamiento de cifrado TLS
Httpserver.enabledignorefavicon
Establezca si se debe ignorar la respuesta de Favicon, el valor predeterminado es falso. Si este elemento está configurado, el IgnorefaviconModule integrado se registrará de forma predeterminada y se ejecutará antes de que la ruta entre en vigencia.
Httpserver.enabledBindusEJSONTAG
Establezca si habilita que la etiqueta JSON sea efectiva en la interfaz de enlace, el valor predeterminado es falso. Si este elemento está configurado, la etiqueta JSON se verificará cuando se ejecute BIND.
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
Dependencia ahora administrada por Go Mod.
Introducción del proyecto: servicio HTTP Long Connection Gateway, que proporciona WebSocket y largos servicios de votación
Introducción del proyecto: un programa de blog GO basado en dotweb y mapper
Introducción del proyecto: un servidor de blog (blog) basado en dotweb
Introducción del proyecto: Servicio de token, que proporciona servicios de consistencia de tokens y servicios de generación de identificación globales relacionados, etc.
Introducción del proyecto: el servidor de control central de WeChat Access Token se utiliza para administrar uniformemente Access_tokens de varias cuentas públicas, y proporcionar una interfaz unificada para obtener y actualizar automáticamente los tokens de acceso.
Introducción del proyecto: plantillas integrales del proyecto basadas en DotWeb, Dotlog, Mapper, Dottask, caché y base de datos.