微前端架构如何改变企业的开发模式与效率提升
766
2022-11-05
Gear 是 Go 语言下的一个轻量级、可组合、高性能的 Web 服务框架
A lightweight, composable and high performance web service framework for Go.
Features
Effective and flexible middlewares flow control, create anything by middlewarePowerful and smart HTTP error handlingTrie base gear.Router, as faster as HttpRouter, support regexp parameters and group routesIntegrated timeout context.ContextIntegrated response content compressIntegrated structured logging middlewareIntegrated request body parserIntegrated signed cookiesIntegrated JSON, JSONP, XML and HTML rendererIntegrated CORS, Secure, Favicon and Static middlewaresMore useful methods on gear.Context to manipulate HTTP Request/ResponseRun HTTP and gRPC on the same portCompletely HTTP/2.0 supported
Documentation
Go-Documentation
Import
// package gearimport "github.com/teambition/gear"
Design
Server 底层基于原生 net/http 而不是 fasthttp通过 gear.Middleware 中间件模式扩展功能模块中间件的单向顺序流程控制和级联流程控制功能强大,完美集成 context.Context 的 gear.Context集中、智能、可自定义的错误和异常处理After Hook 和 End Hook 的后置处理Any interface 无限的 gear.Context 状态扩展能力请求数据的解析和验证
FAQ
如何从源码自动生成 Swagger v2 的文档?Go 语言完整的应用项目结构最佳实践是怎样的?
Demo
Hello
https://github.com/teambition/gear/tree/master/example/hello
app := gear.New() // Add logging middleware app.UseHandler(logging.Default(true)) // Add router middleware router := gear.NewRouter() // try: http://127.0.0.1:3000/hello router.Get("/hello", func(ctx *gear.Context) error { return ctx.HTML(200, "
HTTP2 with Push
https://github.com/teambition/gear/tree/master/example/http2
package mainimport ( "net/http" "github.com/teambition/gear" "github.com/teambition/gear/logging" "github.com/teambition/gear/middleware/favicon")// go run example/http2/app.go// Visit: https://127.0.0.1:3000/func main() { const htmlBody = `
A CMD tool: static server
https://github.com/teambition/gear/tree/master/example/staticgo
Install it with go:
go install github.com/teambition/gear/example/staticgo
It is a useful CMD tool that serve your local files as web server (support TLS). You can build osx, linux, windows version with make build.
package mainimport ( "flag" "github.com/teambition/gear" "github.com/teambition/gear/logging" "github.com/teambition/gear/middleware/cors" "github.com/teambition/gear/middleware/static")var ( address = flag.String("addr", "127.0.0.1:3000", `address to listen on.`) path = flag.String("path", "./", `static files path to serve.`) certFile = flag.String("certFile", "", `certFile path, used to create TLS static server.`) keyFile = flag.String("keyFile", "", `keyFile path, used to create TLS static server.`))func main() { flag.Parse() app := gear.New() app.UseHandler(logging.Default(true)) app.Use(cors.New()) app.Use(static.New(static.Options{Root: *path})) logging.Println("staticgo v1.1.0, created by https://github.com/teambition/gear") logging.Printf("listen: %s, serve: %s\n", *address, *path) if *certFile != "" && *keyFile != "" { app.Error(app.ListenTLS(*address, *certFile, *keyFile)) } else { app.Error(app.Listen(*address)) }}
HTTP2 & gRPC
https://github.com/teambition/gear/tree/master/example/grpc_server
https://github.com/teambition/gear/tree/master/example/grpc_client
About Router
gear.Router is a trie base HTTP request handler. Features:
Support named parameterSupport regexpSupport suffix matchingSupport multi-routerSupport router layer middlewaresSupport fixed path automatic redirectionSupport trailing slash automatic redirectionAutomatic handle 405 Method Not AllowedAutomatic handle OPTIONS methodBest Performance
The registered path, against which the router matches incoming requests, can contain six types of parameters:
Syntax | Description |
---|---|
:name | named parameter |
:name(regexp) | named with regexp parameter |
:name+suffix | named parameter with suffix matching |
:name(regexp)+suffix | named with regexp parameter and suffix matching |
:name* | named with catch-all parameter |
::name | not named parameter, it is literal :name |
Named parameters are dynamic path segments. They match anything until the next '/' or the path end:
Defined: /api/:type/:ID
/api/user/123 matched: type="user", ID="123"/api/user no match/api/user/123/comments no match
Named with regexp parameters match anything using regexp until the next '/' or the path end:
Defined: /api/:type/:ID(^\d+$)
/api/user/123 matched: type="user", ID="123"/api/user no match/api/user/abc no match/api/user/123/comments no match
Named parameters with suffix, such as Google API Design:
Defined: /api/:resource/:ID+:undelete
/api/file/123 no match/api/file/123:undelete matched: resource="file", ID="123"/api/file/123:undelete/comments no match
Named with regexp parameters and suffix:
Defined: /api/:resource/:ID(^\d+$)+:cancel
/api/task/123 no match/api/task/123:cancel matched: resource="task", ID="123"/api/task/abc:cancel no match
Named with catch-all parameters match anything until the path end, including the directory index (the '/' before the catch-all). Since they match anything until the end, catch-all parameters must always be the final path element.
Defined: /files/:filepath*
/files no match/files/LICENSE matched: filepath="LICENSE"/files/templates/article.html matched: filepath="templates/article.html"
The value of parameters is saved on the Matched.Params. Retrieve the value of a parameter by name:
type := matched.Params("type")id := matched.Params("ID")
More Middlewares
Structured logging: github.com/teambition/gear/loggingCORS handler: github.com/teambition/gear/middleware/corsSecure handler: github.com/teambition/gear/middleware/secureStatic serving: github.com/teambition/gear/middleware/staticFavicon serving: github.com/teambition/gear/middleware/favicongRPC serving: github.com/teambition/gear/middleware/grpcJWT and Crypto auth: Gear-AuthCookie session: Gear-SessionSession middleware: https://github.com/go-session/gear-sessionSmart rate limiter: Gear-RatelimiterCSRF: Gear-CSRFOpentracing with Zipkin: Gear-Tracing
License
Gear is licensed under the MIT license. Copyright © 2016-2020 Teambition.
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~