Simple and 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)
}
DotWeb | 1.9.2 | 16core16G | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cpu | 内存 | 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 | 内存 | 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 | 内存 | 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 |
1、Router.GET(path string, handle HttpHandle)
2、Router.POST(path string, handle HttpHandle)
3、Router.HEAD(path string, handle HttpHandle)
4、Router.OPTIONS(path string, handle HttpHandle)
5、Router.PUT(path string, handle HttpHandle)
6、Router.PATCH(path string, handle HttpHandle)
7、Router.DELETE(path string, handle HttpHandle)
8、Router.HiJack(path string, handle HttpHandle)
9、Router.WebSocket(path string, handle HttpHandle)
10、Router.Any(path string, handle HttpHandle)
11、Router.RegisterRoute(routeMethod string, path string, handle HttpHandle)
12、Router.RegisterHandler(name string, handler HttpHandle)
13、Router.GetHandler(name string) (HttpHandle, bool)
14、Router.MatchPath(ctx Context, routePath string) bool
Принимает два параметра: один — URI путь, другой — тип HttpHandle, устанавливает метод, который будет выполняться при совпадении с этим путём.
Статический маршрутизатор использует синтаксис без параметров, pattern — это фиксированная строка.
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
Маршрутизатор с параметрами использует двоеточие : после строки в качестве параметра имени, можно получить значение параметра маршрута через метод GetRouterName 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))
}
}
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} }
8. Server Config
HttpServer:*
HttpServer.EnabledSession* — устанавливает, будет ли включена поддержка сессий. В настоящее время поддерживаются два режима: runtime и redis. По умолчанию поддержка отключена.
HttpServer.EnabledGzip* — устанавливает, будет ли включён Gzip. По умолчанию отключён.
HttpServer.EnabledListDir* — определяет, будет ли использоваться каталог для просмотра. Действует только для Router.ServerFile. Если включено, можно просматривать файлы в каталоге. По умолчанию выключено.
HttpServer.EnabledAutoHEAD* — включает или отключает автоматический HEAD-маршрут. Если включён, то все маршруты, кроме Websocket и HEAD, будут автоматически иметь HEAD-маршруты. В режиме разработки по умолчанию отключено.
HttpServer.EnabledAutoOPTIONS* — включает или отключает автоматический OPTIONS-маршрут. Если включён, все маршруты, кроме Websocket и HEAD, автоматически получат OPTIONS-маршруты. В режиме разработки по умолчанию отключено.
HttpServer.EnabledIgnoreFavicon* — позволяет игнорировать запросы на значок сайта. Обычно используется в интерфейсных проектах.
HttpServer.EnabledDetailRequestData* — включает подробную статистику запросов данных. По умолчанию false. Если включено, будет использоваться ServerStateInfo для сбора подробной статистики URL-адресов запросов.
HttpServer.EnabledTLS* — включает TLS-шифрование.
HttpServer.EnabledBindUseJsonTag* — включает использование json tag при выполнении Bind. По умолчанию отключено. Если включено, при выполнении Bind будет проверяться наличие json tag.
Run Mode*
Добавлены режимы разработки и производства. По умолчанию используется режим разработки. Для переключения между режимами используются функции DotWeb.SetDevelopmentMode и DotWeb.SetProductionMode.
В режиме разработки не обработанные исключения выводятся подробно, включается логирование, а также автоматически включаются AutoHead и AutoOptions. В будущем планируется расширить конфигурацию режимов работы.
9. Exception
500 error
По умолчанию при возникновении необработанного исключения выводится стандартная ошибка или подробная информация об исключении, возвращается 500 ошибок.
Пользовательская обработка исключений реализуется через функцию DotServer.SetExceptionHandle(handler *ExceptionHandle), где ExceptionHandle — это функция, которая принимает контекст и ошибку.
404 error
По умолчанию при 404 ошибке используется функция http.NotFound. Пользовательская обработка реализуется через DotWeb.SetNotFoundHandle(handler NotFoundHandle), где NotFoundHandle — функция, принимающая ответ и запрос.
Dependency
Для работы программы используются следующие зависимости:
— websocket — golang.org/x/net/websocket;
— redis — github.com/garyburd/redigo;
— yaml — gopkg.in/yaml.v2.
Все зависимости управляются go mod.
Связанные проекты
LongWeb — проект, который представляет собой шлюз для HTTP-соединений и предоставляет услуги Websocket и длинного опроса.
yulibaozi.com — блог, основанный на dotweb и mapper.
Golang-Blog-Server — ещё один блог на основе dotweb.
TokenServer — токен-сервер, предоставляющий услуги согласованности токенов и генерации глобальных идентификаторов.
Wechat-token — сервер управления токенами WeChat, предназначенный для централизованного управления access_tokens различных публичных аккаунтов и предоставления унифицированных интерфейсов для получения и автоматического обновления access_token.
dotweb-start — комплексный шаблон проекта на основе dotweb, dotlog, mapper, dottask, cache и database.
Контакты
QQ-Group: 193409346 — Golang-Devfeel.
Gitter: Devfeel/dotweb — Wechat.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )