Go語言使用Gin處理路由參數(shù)和查詢參數(shù)
在 Web API 開發(fā)中,處理 路由參數(shù)(Path Parameter) 和 查詢參數(shù)(Query Parameter) 是非常常見的需求。
Go 語言的 Gin 框架在這方面提供了簡潔的 API,讓你輕松獲取和使用這些參數(shù)。
本文將通過一個完整的例子,帶你掌握 Gin 中這兩類參數(shù)的用法。
一、路由參數(shù) vs 查詢參數(shù)
1. 路由參數(shù)(Path Parameter)
出現(xiàn)在 URL 路徑中
通常用于標(biāo)識資源 ID
例如:
GET /users/123
這里 123 就是路由參數(shù) id。
2. 查詢參數(shù)(Query Parameter)
出現(xiàn)在 ? 后面,以 & 分隔
用于過濾、分頁等非資源唯一標(biāo)識的情況
例如:
GET /search?keyword=gin&page=2
二、Gin 獲取路由參數(shù)和查詢參數(shù)
Gin 通過 :param 定義路由參數(shù),通過 c.Param() 獲??;
查詢參數(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)行與測試
啟動服務(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ù),需要手動轉(zhuǎn)換:
pageNum, err := strconv.Atoi(c.DefaultQuery("page", "1"))
2. 路由沖突
如果有多個類似 /users/:id 的路由,注意避免與靜態(tài)路由沖突,比如 /users/list 可能會被解析成 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操作iptables和ipset設(shè)置黑白名單
這篇文章主要介紹了如何用go操作iptables和ipset設(shè)置黑白名單問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
Go使用TimerController解決timer過多的問題
多路復(fù)用,實(shí)際上Go底層也是一種多路復(fù)用的思想去實(shí)現(xiàn)的timer,但是它是底層的timer,我們需要解決的問題就過多的timer問題!本文給大家介紹了Go使用TimerController解決timer過多的問題,需要的朋友可以參考下2024-12-12
GoFrame?gredis緩存DoVar及Conn連接對象的自動序列化
這篇文章主要為大家介紹了GoFrame?gredis干貨DoVar?Conn連接對象自動序列化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Go使用Pipeline實(shí)現(xiàn)一個簡潔而高效的數(shù)據(jù)處理流水線
在并發(fā)編程中,流水線Pipeline是一種常見的設(shè)計(jì)模式,它將一個復(fù)雜任務(wù)拆解為多個獨(dú)立步驟,由多個協(xié)程并行處理并通過通道傳遞數(shù)據(jù),Go語言天生支持這種模型,能顯著提高數(shù)據(jù)處理的性能和可讀性,本文將給大家介紹如何使用Go實(shí)現(xiàn)一個簡潔而高效的數(shù)據(jù)處理流水線2025-08-08
Go語言標(biāo)準(zhǔn)輸入輸出庫的基本使用教程
輸入輸出在任何一門語言中都必須提供的一個功能,下面這篇文章主要給大家介紹了關(guān)于Go語言標(biāo)準(zhǔn)輸入輸出庫的基本使用,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02

