
Micro -estrutura da Web simples e fácil de ir
IMPORTANTE: agora precisa de suporte de versão GO1.9+ e suporte para o MOD GO.
Documento: https://www.kancloud.cn/devfeel/dotweb/346608
Guia: 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 | Memória | Amostras | Média | Mediana | Linha de 90% | Linha de 95% | 99%de linha | Min | Máx | Erro% | Taxa de transferência | Recebido KB/Sec | 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 | |||||||||||
| CPU | Memória | Amostras | Média | Mediana | Linha de 90% | Linha de 95% | 99%de linha | Min | Máx | Erro% | Taxa de transferência | Recebido KB/Sec | 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 |
| Gin | 1.9.2 | 16Core16G | |||||||||||
| CPU | Memória | Amostras | Média | Mediana | Linha de 90% | Linha de 95% | 99%de linha | Min | Máx | Erro% | Taxa de transferência | Recebido KB/Sec | 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 ) boolAceita dois parâmetros, um é o caminho URI e o outro é o tipo Httphandle, definindo o método a ser executado ao corresponder ao caminho;
Sintaxe de roteamento estático significa que não há variáveis de parâmetros, o padrão é uma sequência fixa.
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 )
}Teste: Curl http://127.0.0.1/hello
O roteamento de parâmetros é seguido por uma string como o nome do parâmetro. Você pode obter o valor do parâmetro de roteamento através do método getRouTerTame do 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 )
} teste:
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 ) teste:
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
Defina se deve ativar o suporte da sessão. Atualmente, ele suporta modos de tempo de execução e redis e não está ativado por padrão.
HttpServer.enabledGzip
Defina se deve ativar o suporte do GZIP, ele não será ativado por padrão
HttpServer.enabledListdir
Defina se deve ativar a navegação do diretório, ele é válido apenas para o roteador.Serverfile. Se você definir este item, poderá procurar arquivos de diretório e ele não será ativado por padrão.
HttpServer.enableDautohead
Defina se deve ativar automaticamente o roteamento da cabeça. Se este item estiver definido, as rotas de cabeça serão adicionadas por padrão para todos os métodos de roteamento, exceto o WebSocket Head. O modo de não desenvolvimento não será ativado por padrão.
HttpServer.enabledAutions
Defina se deve ativar automaticamente o roteamento de opções. Se este item estiver definido, o roteamento de opções será adicionado por padrão para todos os métodos de roteamento, exceto o WebSocket Head. O modo de não desenvolvimento não será ativado por padrão.
HttpServer.enabledIgnoreFavicon
Defina se deve ignorar o pedido do Favicon, geralmente usado em projetos de interface
HttpServer.enabledDetailRequestData
Defina se deve habilitar estatísticas detalhadas de dados de solicitação, o padrão é falso. Se este item estiver definido, as estatísticas do detalheRequesturldata no ServerStateInfo serão ativadas.
HttpServer.enabledTls
Defina se deve habilitar o processamento de criptografia TLS
HttpServer.enabledIgnoreFavicon
Defina se deve ignorar a resposta do Favicon, o padrão é falso. Se este item estiver definido, o IgnoreFaviconModule integrado será registrado por padrão e executado antes que a rota entre em vigor.
HttpServer.enabledBinduseJSONTAG
Defina se deve permitir que a tag JSON seja eficaz na interface de ligação, o padrão é falso. Se este item estiver definido, a tag JSON será verificada quando a ligação for executada.
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
Dependência agora gerenciada pelo Go Mod.
Introdução ao projeto: Serviço de gateway de conexão longa HTTP, fornecendo serviços de pesquisa websocket e longas pesquisas
Introdução ao projeto: um programa de blog Go baseado em Dotweb e mapero
Introdução ao projeto: um servidor Go Blog (blog) baseado no Dotweb
Introdução ao projeto: Serviço de token, fornecendo serviços de consistência de token e serviços de geração de identificação global relacionados, etc.
Introdução ao projeto: o WeChat Access Token Central Control Server é usado para gerenciar uniformemente o Access_tokens de várias contas públicas e fornecer uma interface unificada para obter e atualizar automaticamente tokens de acesso.
Introdução ao projeto: modelos abrangentes de projeto com base em Dotweb, Dotlog, Mapper, Dottask, Cache e Banco de Dados.