Gin 注解路由,自动参数绑定工具
2011 年 6 月 18 日
中文文档
Automatic parameter binding base on go-gin
Golang gin automatic parameter binding
- Support for RPC automatic mapping
- Support object registration
- Support annotation routing
-
base on go-gin
on json restful style - implementation of parameter filtering and binding with request
- code registration simple and supports multiple ways of registration
API details
Three interface modes are supported
-
func(*gin.Context) // go-gin Raw interface
func(*api.Context) // Custom context type -
func(*api.Context,req) // Custom context type,with request
func(*api.Context,*req) -
func(*gin.Context,*req) // go-gin context,with request
func(*gin.Context,req)
一,Parameter auto binding
package main import ( "fmt" "net/http" "github.com/gin-gonic/gin" "github.com/xxjwxc/ginrpc" "github.com/xxjwxc/ginrpc/api" ) type ReqTest struct { Access_token string `json:"access_token"` UserName string `json:"user_name" binding:"required"` // With verification mode.带校验方式 Password string `json:"password"` } //TestFun4 Callback method with custom context and resolved req parameters func TestFun4(c *gin.Context, req ReqTest) { fmt.Println(c.Params) fmt.Println(req) c.JSON(http.StatusOK, req) } func main() { base := ginrpc.New() router := gin.Default() router.POST("/test4", base.HandlerFunc(TestFun4)) base.RegisterHandlerFunc(router, []string{"post", "get"}, "/test", TestFun4) // Multiple request mode registration router.Run(":8080") }
-
curl
curl 'http://127.0.0.1:8080/test4' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
二,Object registration (annotation routing)
Initialization project (this project is named after ginweb
)
`` go mod init ginweb ```
coding more>>
package main import ( "fmt" "net/http" _ "ginweb/routers" // Debug mode requires adding [mod] / routes to register annotation routes.debug模式需要添加[mod]/routers 注册注解路由 "github.com/gin-gonic/gin" "github.com/xxjwxc/ginrpc" "github.com/xxjwxc/ginrpc/api" ) type ReqTest struct { Access_token string `json:"access_token"` UserName string `json:"user_name" binding:"required"` // With verification mode Password string `json:"password"` } // Hello ... type Hello struct { } // Hello Annotated route (bese on beego way) // @router /block [post,get] func (s *Hello) Hello(c *api.Context, req *ReqTest) { fmt.Println(req) c.JSON(http.StatusOK, "ok") } // Hello2 Route without annotation (the parameter is 2 default post) func (s *Hello) Hello2(c *gin.Context, req ReqTest) { fmt.Println(req) c.JSON(http.StatusOK, "ok") } func main() { base := ginrpc.New(ginrpc.WithCtx(func(c *gin.Context) interface{} { return api.NewCtx(c) }), ginrpc.WithDebug(true), ginrpc.WithGroup("xxjwxc")) router := gin.Default() base.Register(router, new(Hello)) // object register like(go-micro) // or base.Register(router, new(Hello)) router.Run(":8080") }
– Annotation routing related instructions
// @router /block [post,get] @router tag /block router [post,get] method
Note: if there is no annotation route in the object function, the system will add annotation route by default. Post mode: with req (2 parameters (CTX, req)), get mode is a parameter (CTX)
1. Annotation route will automatically create [mod]/routes/gen_router.go
file, which needs to be added when calling:
`` _ "[mod]/routers" // Debug mode requires adding [mod] / routes to register annotation routes ``` By default, the [gen_router. Data] file will also be generated in the root directory of the project (keep this file, and you can embed it without adding the above code)
2. way of annotation route :
more to saying [ginweb](/sample/ginweb)
3. Parameter description
ginrpc.WithCtx : Set custom context ginrpc.WithDebug(true) : Set debug mode ginrpc.WithGroup("xxjwxc") : Add routing prefix (you can also use gin. Group grouping) ginrpc.WithBigCamel(true) : Set big camel standard (false is web mode, _, lowercase) [more>>](https://godoc.org/github.com/xxjwxc/ginrpc)
4. Execute curl to automatically bind parameters. See the results directly
curl 'http://127.0.0.1:8080/xxjwxc/block' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
curl 'http://127.0.0.1:8080/xxjwxc/hello.hello2' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
Stargazers over time
Next
1. Export API documents 2. Export postman test configuration