gin 注解路由轮锥,自動(dòng)參數(shù)綁定工具

ginprc

golang gin 參數(shù)自動(dòng)綁定工具

  • 支持rpc自動(dòng)映射
  • 支持對(duì)象注冊(cè)
  • 支持注解路由
  • 基于 go-gin 的 json restful 風(fēng)格的golang基礎(chǔ)庫
  • 自帶請(qǐng)求參數(shù)過濾及綁定實(shí)現(xiàn) binding:"required" validator
  • 代碼注冊(cè)簡(jiǎn)單且支持多種注冊(cè)方式

api接口說明

支持3種接口模式

  • func(gin.Context) //go-gin 原始接口
    func(
    api.Context) //自定義的context類型
  • func(api.Context,req) //自定義的context類型,帶request 請(qǐng)求參數(shù)
    func(
    api.Context,*req)
  • func(gin.Context,req) //go-gin context類型,帶request 請(qǐng)求參數(shù)
    func(*gin.Context,req)

示例代碼

初始化項(xiàng)目(本項(xiàng)目以ginweb 為名字)

``` go mod init ginweb ```

代碼 (詳細(xì)地址:https://github.com/xxjwxc/ginrpc/tree/master/sample/ginweb)

  package main

import (
    "fmt"
    "net/http"

    _ "ginweb/routers" // debug模式需要添加[mod]/routers 注冊(cè)注解路由

    "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"` // 帶校驗(yàn)方式
    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 不帶注解路由(參數(shù)為2默認(rèn)post)
func (s *Hello) Hello2(c *gin.Context, req ReqTest) {
    fmt.Println(req)
    fmt.Println(s.Index)
    c.JSON(http.StatusOK, "ok")
}

//TestFun1 gin 默認(rèn)的函數(shù)回調(diào)地址
func TestFun1(c *gin.Context) {
    fmt.Println(c.Params)
    c.String(200, "ok")
}

//TestFun2 自定義context的函數(shù)回調(diào)地址
func TestFun2(c *api.Context) {
    fmt.Println(c.Params)
    c.JSON(http.StatusOK, "ok")
}

//TestFun3 帶自定義context跟已解析的req參數(shù)回調(diào)方式
func TestFun3(c *api.Context, req *ReqTest) {
    fmt.Println(c.Params)
    fmt.Println(req)
    c.JSON(http.StatusOK, "ok")
}

//TestFun4 帶自定義context跟已解析的req參數(shù)回調(diào)方式
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)                          // 對(duì)象注冊(cè)
    router.POST("/test1", base.HandlerFunc(TestFun1)) // 函數(shù)注冊(cè)
    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) // 多種請(qǐng)求方式注冊(cè)

    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.注解路由會(huì)自動(dòng)創(chuàng)建[mod]/routers/gen_router.go 文件 需要在調(diào)用時(shí)加:

    _ "[mod]/routers" // debug模式需要添加[mod]/routers 注冊(cè)注解路由
    

    默認(rèn)也會(huì)在項(xiàng)目根目錄生成[gen_router.data]文件(保留次文件矫钓,可以不用添加上面代碼嵌入)

  • 2.注解路由調(diào)用方式:

    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))                          // 對(duì)象注冊(cè)
    router.Run(":8080")
    

    詳細(xì)請(qǐng)看demo ginweb

  • 3.執(zhí)行curl,可以自動(dòng)參數(shù)綁定交胚。直接看結(jié)果

    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 參數(shù)說明
    ginrpc.WithCtx : 設(shè)置自定義context
    ginrpc.WithDebug(true) : 設(shè)置debug模式
    ginrpc.WithGroup("xxjwxc") : 添加路由前綴 (也可以使用gin.Group 分組)
    ginrpc.WithBigCamel(true) : 設(shè)置大駝峰標(biāo)準(zhǔn)(false 為web模式份汗,_,小寫)

    更多

下一步

1.導(dǎo)出api文檔
2.導(dǎo)出postman測(cè)試配置

代碼地址: ginprc 如果喜歡請(qǐng)給星支持

傳送門

如果你喜歡,請(qǐng)'star'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝴簇,隨后出現(xiàn)的幾起案子杯活,更是在濱河造成了極大的恐慌,老刑警劉巖熬词,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旁钧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡互拾,警方通過查閱死者的電腦和手機(jī)歪今,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颜矿,“玉大人寄猩,你說我怎么就攤上這事∑锝” “怎么了田篇?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)箍铭。 經(jīng)常有香客問我泊柬,道長(zhǎng),這世上最難降的妖魔是什么诈火? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任兽赁,我火速辦了婚禮,結(jié)果婚禮上冷守,老公的妹妹穿的比我還像新娘刀崖。我一直安慰自己,他們只是感情好教沾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布蒲跨。 她就那樣靜靜地躺著,像睡著了一般授翻。 火紅的嫁衣襯著肌膚如雪或悲。 梳的紋絲不亂的頭發(fā)上孙咪,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音巡语,去河邊找鬼翎蹈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛男公,可吹牛的內(nèi)容都是我干的荤堪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枢赔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼澄阳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起踏拜,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤碎赢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后速梗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肮塞,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年姻锁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枕赵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡位隶,死狀恐怖拷窜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涧黄,我是刑警寧澤装黑,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站弓熏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏糠睡。R本人自食惡果不足惜挽鞠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狈孔。 院中可真熱鬧信认,春花似錦、人聲如沸均抽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽油挥。三九已至潦蝇,卻和暖如春款熬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背攘乒。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工贤牛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人则酝。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓殉簸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沽讹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子般卑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容