GIN的路由以及傳參問題
1.路由:
func main() {
r := gin.Default()
r.GET("/ping/:name", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": c.Param("name"),
})
fmt.Println(c.Param("name"))
})
r.Run() // listen and serve on 0.0.0.0:8080
}
以冒號的形式設(shè)置url參數(shù)的話可以通過,對應(yīng)的參數(shù)可以通過context.Param的形式獲得。但是存在問題 無法導(dǎo)向/ping本身
func main() {
r := gin.Default()
r.GET("/ping/*name", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": c.Param("name"),
})
fmt.Println(c.Param("name"))
})
r.Run() // listen and serve on 0.0.0.0:8080
}
這里就存在另一種參數(shù)形式,也就是*,每次獲得的參數(shù)都將包含/,也可以作用于/ping,如果當(dāng)前的路由中不存在/ping的處理形式,將會自動跳轉(zhuǎn)到/ping/并交給/ping/*name處理
并且/ping/*name與/ping/:name存在沖突,不能同時寫入路由。
2.傳參
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
":message": c.Query("name"),
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
當(dāng)get傳參的時候(url上顯示的參數(shù))
可以通過Context.Query來獲得對應(yīng)的value,如果需要判斷是否為空,則可以使用Context.getQuery更加優(yōu)雅,也可以使用Context.DefaultQuery類似于java中map的getOrDefault
當(dāng)POST傳參的時候(請求寫入body)
可以通過Context.PostForm來獲得對應(yīng)的value,如果需要判斷是否為空,則可以使用Context.getPostForm更加優(yōu)雅,也可以使用Context.DefaultPostForm類似于java中map的getOrDefault。
但是測試的時候發(fā)現(xiàn),似乎這個方法不像SpringMVC中的RequestBody可以獲取對應(yīng)的JSON,這里的操作會有些復(fù)雜,需要通過流,讀取Body,并且轉(zhuǎn)換成JSON,通過map讀取對應(yīng)的參數(shù)
var user map[string]interface{}
body, _ := ioutil.ReadAll(req.Body)
json.Unmarshal(body, &user)
fmt.Println("獲取json中的username:", user["username"])
fmt.Println("獲取json中的password:", user["password"].(string)) //轉(zhuǎn)字符串通過len(password)!=0判斷長度
以上時大致方法,這里先提出一個疑問,看看后面的學(xué)習(xí)中是否能解決,不能直接通過中間件實現(xiàn)一個讀取轉(zhuǎn)化,從SpringMVC來看 這不是一個很難的輪子。
到此這篇關(guān)于GIN的路由以及傳參問題的文章就介紹到這了,更多相關(guān)GIN路由及傳參內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言結(jié)構(gòu)體(Struct)和接口(Interface)詳解
本文主要介紹了Go語言結(jié)構(gòu)體(Struct)和接口(Interface),詳解其定義、匿名字段、值/指針接收器等特性,探討接口的隱式實現(xiàn)、類型斷言及組合應(yīng)用,下面就一起來了解一下2025-09-09
Go語言中Struct與繼承與匿名字段和內(nèi)嵌結(jié)構(gòu)體全面詳解
這篇文章主要介紹了Go語言中Struct與繼承與匿名字段和內(nèi)嵌結(jié)構(gòu)體,Go語言中通過結(jié)構(gòu)體的內(nèi)嵌再配合接口比面向?qū)ο缶哂懈叩臄U(kuò)展性和靈活性,感興趣的可以了解一下2023-04-04
golang判斷chan channel是否關(guān)閉的方法
這篇文章主要介紹了golang判斷chan channel是否關(guān)閉的方法,結(jié)合實例形式對比分析了Go語言判斷chan沒有關(guān)閉的后果及關(guān)閉的方法,需要的朋友可以參考下2016-07-07
golang中結(jié)構(gòu)體嵌套接口的實現(xiàn)
本文主要介紹了golang中結(jié)構(gòu)體嵌套接口的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
golang使用sync.singleflight解決熱點緩存穿透問題
在go的sync包中,有一個singleflight包,里面有一個?singleflight.go文件,代碼加注釋,一共200行出頭,通過?singleflight可以很容易實現(xiàn)緩存和去重的效果,避免重復(fù)計算,接下來我們就給大家詳細(xì)介紹一下sync.singleflight如何解決熱點緩存穿透問題2023-07-07

