Go語言使用Gin處理路由參數(shù)和查詢參數(shù)
在 Web API 開發(fā)中,處理 路由參數(shù)(Path Parameter) 和 查詢參數(shù)(Query Parameter) 是非常常見的需求。
Go 語言的 Gin 框架在這方面提供了簡潔的 API,讓你輕松獲取和使用這些參數(shù)。
本文將通過一個(gè)完整的例子,帶你掌握 Gin 中這兩類參數(shù)的用法。
一、路由參數(shù) vs 查詢參數(shù)
1. 路由參數(shù)(Path Parameter)
出現(xiàn)在 URL 路徑中
通常用于標(biāo)識(shí)資源 ID
例如:
GET /users/123
這里 123 就是路由參數(shù) id。
2. 查詢參數(shù)(Query Parameter)
出現(xiàn)在 ? 后面,以 & 分隔
用于過濾、分頁等非資源唯一標(biāo)識(shí)的情況
例如:
GET /search?keyword=gin&page=2
二、Gin 獲取路由參數(shù)和查詢參數(shù)
Gin 通過 :param 定義路由參數(shù),通過 c.Param() 獲?。?/p>
查詢參數(shù)可以用 c.Query() 或 c.DefaultQuery() 獲取。
三、示例代碼
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 路由參數(shù)示例
r.GET("/users/:id", func(c *gin.Context) {
id := c.Param("id")
c.JSON(http.StatusOK, gin.H{
"user_id": id,
})
})
// 查詢參數(shù)示例
r.GET("/search", func(c *gin.Context) {
keyword := c.Query("keyword") // 沒有默認(rèn)值
page := c.DefaultQuery("page", "1") // 默認(rèn)值為 1
c.JSON(http.StatusOK, gin.H{
"keyword": keyword,
"page": page,
})
})
// 組合使用
r.GET("/articles/:category", func(c *gin.Context) {
category := c.Param("category")
page := c.DefaultQuery("page", "1")
c.JSON(http.StatusOK, gin.H{
"category": category,
"page": page,
})
})
r.Run(":8080")
}
四、運(yùn)行與測試
啟動(dòng)服務(wù):
go run main.go
1. 測試路由參數(shù)
curl http://localhost:8080/users/42
返回:
{"user_id":"42"}
2. 測試查詢參數(shù)
curl "http://localhost:8080/search?keyword=gin&page=2"
返回:
{"keyword":"gin","page":"2"}
3. 路由參數(shù) + 查詢參數(shù)
curl "http://localhost:8080/articles/golang?page=3"
返回:
{"category":"golang","page":"3"}
五、注意事項(xiàng)
1. 參數(shù)類型
Gin 獲取到的參數(shù)是字符串,如果需要整數(shù)或浮點(diǎn)數(shù),需要手動(dòng)轉(zhuǎn)換:
pageNum, err := strconv.Atoi(c.DefaultQuery("page", "1"))
2. 路由沖突
如果有多個(gè)類似 /users/:id 的路由,注意避免與靜態(tài)路由沖突,比如 /users/list 可能會(huì)被解析成 id=list。
3. 默認(rèn)值
查詢參數(shù)建議用 c.DefaultQuery() 設(shè)置默認(rèn)值,避免出現(xiàn)空字符串或 nil。
六、總結(jié)
通過 Gin,我們可以非常簡潔地處理:
- 路由參數(shù):
c.Param("name") - 查詢參數(shù):
c.Query("key")/c.DefaultQuery("key", "default")
在實(shí)際項(xiàng)目中,你可以將參數(shù)解析和驗(yàn)證抽取成中間件,提升代碼可維護(hù)性。
到此這篇關(guān)于Go語言使用Gin處理路由參數(shù)和查詢參數(shù)的文章就介紹到這了,更多相關(guān)Go處理路由參數(shù)和查詢參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用go語言實(shí)現(xiàn)Redis持久化的示例代碼
redis 是一個(gè)內(nèi)存數(shù)據(jù)庫,如果你把進(jìn)程殺掉,那么里面存儲(chǔ)的數(shù)據(jù)都會(huì)消失,那么這篇文章就是來解決 redis 持久化的問題,本文給大家介紹了使用go語言實(shí)現(xiàn)Redis持久化,需要的朋友可以參考下2024-07-07
使用Golang調(diào)用攝像頭并進(jìn)行圖像處理
近年來,攝像頭成為了我們生活中不可或缺的設(shè)備之一,從智能手機(jī)到安全監(jiān)控系統(tǒng),無處不在的攝像頭給我們帶來了便利和安全,在開發(fā)攝像頭相關(guān)的應(yīng)用程序時(shí),選擇一種高效和易用的編程語言是非常重要的,本文將介紹如何使用Golang調(diào)用攝像頭并進(jìn)行圖像處理2023-11-11
Golang使用Gin框架實(shí)現(xiàn)http分塊傳輸
這篇文章主要為大家詳細(xì)介紹了Golang中如何使用Gin框架實(shí)現(xiàn)http分塊傳輸功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2023-05-05
詳解如何使用go-acme/lego實(shí)現(xiàn)自動(dòng)簽發(fā)證書
這篇文章主要為大家詳細(xì)介紹了如何使用?go-acme/lego?的客戶端或庫完成證書的自動(dòng)簽發(fā),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
go-zero熔斷機(jī)制組件Breaker接口定義使用解析
這篇文章主要為大家介紹了go-zero熔斷機(jī)制組件Breaker接口定義使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

