gin 註解路由,自動引數繫結工具
ginprc
golang gin 引數自動繫結工具
- 支援 rpc 自動對映
- 支援物件註冊
- 支援註解路由
- 基於 go-gin 的 json restful 風格的 golang 基礎庫
- 自帶請求引數過濾及繫結實現 binding:"required" validator
- 程式碼註冊簡單且支援多種註冊方式
api 介面說明
支援 3 種介面模式
- func(gin.Context) //go-gin 原始介面
func( api.Context) // 自定義的 context 型別 - func(api.Context,req) // 自定義的 context 型別,帶 request 請求引數
func( api.Context,*req) - func(gin.Context,req) //go-gin context 型別,帶 request 請求引數
func(*gin.Context,req)
示例程式碼
初始化專案 (本專案以 ginweb 為名字)
go mod init ginweb
程式碼 (詳細地址:https://github.com/xxjwxc/ginrpc/tree/master/sample/ginweb)
package main
import (
"fmt"
"net/http"
_ "ginweb/routers" // 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"
// 帶校驗方式
Password string json:"password"
}
// Hello ...
type Hello struct {
Index int
}
// Hello 帶註解路由(參考beego形式)
// @router /block [post,get]
func (s *Hello) Hello(c *api.Context, req *ReqTest) {
fmt.Println(req)
fmt.Println(s.Index)
c.JSON(http.StatusOK, "ok")
}
// Hello2 不帶註解路由(引數為2預設post)
func (s *Hello) Hello2(c *gin.Context, req ReqTest) {
fmt.Println(req)
fmt.Println(s.Index)
c.JSON(http.StatusOK, "ok")
}
//TestFun1 gin 預設的函式回撥地址
func TestFun1(c *gin.Context) {
fmt.Println(c.Params)
c.String(200, "ok")
}
//TestFun2 自定義context的函式回撥地址
func TestFun2(c *api.Context) {
fmt.Println(c.Params)
c.JSON(http.StatusOK, "ok")
}
//TestFun3 帶自定義context跟已解析的req引數回撥方式
func TestFun3(c *api.Context, req *ReqTest) {
fmt.Println(c.Params)
fmt.Println(req)
c.JSON(http.StatusOK, "ok")
}
//TestFun4 帶自定義context跟已解析的req引數回撥方式
func TestFun4(c *gin.Context, req ReqTest) {
fmt.Println(c.Params)
fmt.Println(req)
c.JSON(http.StatusOK, req)
}
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()
h := new(Hello)
h.Index = 123
base.Register(router, h) // 物件註冊
router.POST("/test1", base.HandlerFunc(TestFun1)) // 函式註冊
router.POST("/test2", base.HandlerFunc(TestFun2))
router.POST("/test3", base.HandlerFunc(TestFun3))
router.POST("/test4", base.HandlerFunc(TestFun4))
base.RegisterHandlerFunc(router, []string{"post", "get"}, "/test", TestFun1) // 多種請求方式註冊
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"}'
註解路由
-
1. 註解路由會自動建立 [mod]/routers/gen_router.go 檔案 需要在呼叫時加:
_ "[mod]/routers" // debug模式需要新增[mod]/routers 註冊註解路由
預設也會在專案根目錄生成 [gen_router.data] 檔案 (保留次檔案,可以不用新增上面程式碼嵌入)
-
2. 註解路由呼叫方式:
base := ginrpc.New(ginrpc.WithCtx(func(c *gin.Context) interface{} { return api.NewCtx(c) }), ginrpc.WithDebug(true), ginrpc.WithGroup("xxjwxc")) base.Register(router, new(Hello)) // 物件註冊 router.Run(":8080")
詳細請看 demo ginweb
-
3. 執行 curl,可以自動引數繫結。直接看結果
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"}'
-
4 引數說明
ginrpc.WithCtx : 設定自定義 context
ginrpc.WithDebug (true) : 設定 debug 模式
ginrpc.WithGroup ("xxjwxc") : 新增路由字首 (也可以使用 gin.Group 分組)
ginrpc.WithBigCamel (true) : 設定大駝峰標準 (false 為 web 模式,_, 小寫)
下一步
1.匯出api文件
2.匯出postman測試配置
程式碼地址: ginprc 如果喜歡請給星支援
如果你喜歡,請'star'
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- gin自動引數繫結工具,rpc支援RPC
- Flutter 路由——頁面表及頁面引數繫結的自動生成Flutter路由
- beego註解路由中各個引數解釋Go路由
- gin自動路由中介軟體路由
- 介面引數繫結, 公共處理程式碼生成工具
- 工具類 :@RequestMapping 路由註解APP路由
- Gin 模型繫結驗證模型
- Grails中如何繫結引數AI
- 動態路由(URL引數)路由
- 引數校驗註解
- 【工作篇】再次熟悉 SpringMVC 引數繫結SpringMVC
- SwaggerAPI註解詳解,以及註解常用引數配置SwaggerAPI
- Laravel 多鍵路由繫結Laravel路由
- SpringMVC的引數繫結-日期格式轉換SpringMVC
- .net core Web API引數繫結規則WebAPI
- SpringMVC原始碼之引數解析繫結原理SpringMVC原始碼
- Day22:引數註解
- Hyperf - 自動註解
- gin json binding 引數驗證JSON
- [系列] Gin框架 - 資料繫結和驗證框架
- Laravel 框架中 whereRaw like 引數繫結問題Laravel框架
- 一篇文章搞定SpringMVC引數繫結SpringMVC
- Vue select 繫結動態變數Vue變數
- 榮耀路由器解除MAC地址解繫結限制的方法 榮耀路由pro怎麼解除MAC地址繫結限制?路由器Mac
- 基於gin的golang web開發:模型繫結GolangWeb模型
- Gin(四):表單提交校驗和模型繫結模型
- 最近編寫了一個給 gin 框架實現註解路由的工具,個人覺得挺有實際意義框架路由
- 如何在路由繫結中使用 IParsable路由
- 優雅的使用路由模型繫結路由模型
- Mybatis引數傳遞&註解開發MyBatis
- spring框架半自動註解Spring框架
- SpringBoot魔法堂:@MatrixVariable引數註解使用詳解Spring Boot
- Go專案實戰—引數繫結,型別轉換Go型別
- 利用 Spring Boot 中的 @ConfigurationProperties,優雅繫結配置引數Spring Boot
- SpringMVC【引數繫結、資料回顯、檔案上傳】SpringMVC
- 在Vue3中如何為路由Query引數標註型別Vue路由型別
- Gin 框架怎麼驗證繫結到結構體的欄位?框架結構體
- Go 1.22中路由 URL 路由引數Go路由