ZBLOG

golang 获取querystring

在 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)
})

注意事项

  1. 安全性:直接使用 r.URL.Query() 返回的是 url.Values(即 map[string][]string),支持多值参数(如 ?id=1&id=2)。
  2. 类型转换:查询参数默认是字符串,需手动转换其他类型(如 strconv.Atoi(age))。
  3. 编码处理:若参数含特殊字符(如空格、中文),会自动进行 URL Decode。

如果需要更复杂的参数处理(如验证、绑定到结构体),推荐使用框架提供的工具(如 Gin 的 ShouldBindQuery)。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23759

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?