在 Golang 中,可以通过标准库 net/http
或 Web 框架(如 Gin、Echo)获取 URL 的查询参数(Query String)。以下是几种常见方法:
1. 使用标准库 net/http
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
// 获取单个查询参数
name := r.URL.Query().Get("name")
age := r.URL.Query().Get("age")
// 直接访问 Query 对象(map类型)
queryParams := r.URL.Query()
fmt.Println("All query params:", queryParams)
// 输出结果
fmt.Fprintf(w, "Name: %s, Age: %s", name, age)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
- 访问示例:
浏览器输入http://localhost:8080?name=John&age=30
,会输出:
Name: John, Age: 30
2. 使用 Gin 框架
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
// 获取单个参数(带默认值)
name := c.DefaultQuery("name", "Guest")
// 获取必填参数(若不存在则返回空字符串)
age := c.Query("age")
// GetQuery:返回 (value, exists bool)
if city, exists := c.GetQuery("city"); exists {
c.String(200, "City: %s", city)
}
// 获取所有查询参数(map形式)
allParams := c.Request.URL.Query()
c.JSON(200, gin.H{
"name": name,
"age": age,
"all_params": allParams,
})
})
r.Run(":8080")
}
3. Echo / Fiber / Iris等其他框架
(1) Echo
e.GET("/", func(c echo.Context) error {
name := c.QueryParam("name")
return c.String(http.StatusOK, name)
})
(2) Fiber
app.Get("/", func(c *fiber.Ctx) error {
name := c.Query("name")
return c.SendString(name)
})
注意事项:
- 安全性:直接使用
r.URL.Query()
返回的是url.Values
(即map[string][]string
),支持多值参数(如?id=1&id=2
)。 - 类型转换:查询参数默认是字符串,需手动转换其他类型(如
strconv.Atoi(age)
)。 - 编码处理:若参数含特殊字符(如空格、中文),会自动进行 URL Decode。
如果需要更复杂的参数处理(如验证、绑定到结构体),推荐使用框架提供的工具(如 Gin 的 ShouldBindQuery
)。
内容由零声教学AI助手提供,问题来源于学员提问