
Simple и Easy Go Web Micro Framework
Важно: теперь нужна поддержка версий GO1.9+ и поддержка GO MOD.
Документ: https://www.kancloud.cn/devfeel/dotweb/346608
Руководство: 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 )
}| Дотвеб | 1.9.2 | 16core16G | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Процессор | Память | Образцы | Средний | Медиана | 90%линия | 95%линия | 99%линия | Мин | Максимум | Ошибка% | Пропускная способность | Получен KB/Sec | Отправить KB/Sec |
| 40% | 39 м | 15228356 | 19 | 4 | 43 | 72 | 204 | 0 | 2070 | 0,00% | 48703.47 | 7514,79 | 8656.28 |
| 40% | 42 м | 15485189 | 18 | 4 | 41 | 63 | 230 | 0 | 3250 | 0,00% | 49512.99 | 7639,7 | 8800.16 |
| 40% | 44 м | 15700385 | 18 | 3 | 41 | 64 | 233 | 0 | 2083 | 0,00% | 50203.32 | 7746.22 | 8922.86 |
| Эхо | 1.9.2 | 16core16G | |||||||||||
| Процессор | Память | Образцы | Средний | Медиана | 90%линия | 95%линия | 99%линия | Мин | Максимум | Ошибка% | Пропускная способность | Получен KB/Sec | Отправить KB/Sec |
| 38% | 35м | 15307586 | 19 | 4 | 44 | 76 | 181 | 0 | 1808 | 0,00% | 48951.22 | 6166.71 | 9034.94 |
| 36% | 35м | 15239058 | 19 | 4 | 45 | 76 | 178 | 0 | 2003 | 0,00% | 48734.26 | 6139.37 | 8994,9 |
| 37% | 37м | 15800585 | 18 | 3 | 41 | 66 | 229 | 0 | 2355 | 0,00% | 50356.09 | 6343.68 | 9294.24 |
| Джин | 1.9.2 | 16core16G | |||||||||||
| Процессор | Память | Образцы | Средний | Медиана | 90%линия | 95%линия | 99%линия | Мин | Максимум | Ошибка% | Пропускная способность | Получен KB/Sec | Отправить KB/Sec |
| 36% | 36M | 15109143 | 19 | 6 | 44 | 71 | 175 | 0 | 3250 | 0,00% | 48151.87 | 5877,91 | 8746.33 |
| 36% | 40 м | 15255749 | 19 | 5 | 43 | 70 | 189 | 0 | 3079 | 0,00% | 48762.53 | 5952,45 | 8857.25 |
| 36% | 40 м | 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 ) boolПринимает два параметра, один - это путь URI, а другой - тип Httphandle, устанавливающий метод для выполнения при сопоставлении пути;
Статический синтаксис маршрутизации означает, что нет переменных параметров, шаблон является фиксированной строкой.
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 )
}Тест: curl http://127.0.0.1/hello
Маршрутизация параметров сопровождается строкой в качестве имени параметра. Вы можете получить значение параметра маршрутизации через метод httpcontext 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 )
} тест:
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 ) тест:
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
Установите, включить ли поддержку сеанса. В настоящее время он поддерживает режимы времени выполнения и Redis, и по умолчанию не включена.
Httpserver.enabledgzip
Установите, включить ли поддержку GZIP, она не будет включена по умолчанию
Httpserver.enabledlistdir
Установите, включить ли просмотр каталогов, он действителен только для Router.serverfile. Если вы установите этот элемент, вы можете просматривать файлы каталогов, и по умолчанию он не включен.
Httpserver.enabledAutoHead
Установите, автоматически включить маршрутизацию головки. Если этот элемент будет установлен, маршруты для головки будут добавлены по умолчанию для всех методов маршрутизации, кроме WebSocket Head. Режим не развития не будет включен по умолчанию.
Httpserver.enabledautooptions
Установите, следует ли автоматически включить маршрутизацию параметров. Если этот элемент установлен, маршрутизация параметров будет добавлена по умолчанию для всех методов маршрутизации, кроме WebSocket Head. Режим не развития не будет включен по умолчанию.
Httpserver.enabledignorefavicon
Установите, игнорировать ли запрос Favicon, обычно используемый в интерфейсных проектах
Httpserver.enableddetailrequestdata
Установите, включить ли подробную статистику данных запроса, по умолчанию неверно. Если этот элемент будет установлен, будет включена статистика DefitupRequesturLdata в ServerStateInfo.
Httpserver.enabledtls
Установить, включить обработку шифрования TLS
Httpserver.enabledignorefavicon
Установите, следует ли игнорировать ответ Favicon, по умолчанию неверно. Если этот элемент будет установлен, интегрированный игнорированное игнорирование будет зарегистрировано по умолчанию и выполнено до вступления в силу маршрута.
Httpserver.enabledbindusejsontag
Установите, включить ли тег JSON быть эффективным на интерфейсе Bind, по умолчанию является false. Если этот элемент установлен, тег JSON будет проверяться при выполнении 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
Зависимость теперь управляется Go Mod.
Введение проекта: HTTP Long Connection Gateway Service, предоставление WebSocket и длинные избирательные услуги
Введение проекта: программа Go Blog на основе DotWeb и Mapper
Введение проекта: сервер блога Go (блог) на основе DotWeb
Введение проекта: токеновая услуга, предоставление услуг по согласованности токен и связанных с ними услуг Global Id Generation и т. Д.
Введение проекта: Центральный сервер управления WeChat Token используется для равномерного управления Access_tokens различных общественных учетных записей и предоставления унифицированного интерфейса для получения и автоматического обновления токенов доступа.
Введение проекта: комплексные шаблоны проекта на основе DotWeb, Dotlog, Mapper, Dottask, Cache и базы данных.