You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gin框架中GET请求带查询参数返回404,GetUser方法未执行排查

问题原因及解决办法

你遇到404的核心原因是路由定义和请求方式不匹配:

  • 你定义的GET路由是/user/:username,这是路径参数的写法,要求请求路径必须是/user/xxx的形式,xxx会被当作username参数的值。
  • 但你实际发送的请求是localhost:9090/user/?username=abc,这是查询参数的写法,参数放在URL的?后面,和你定义的路由规则不匹配,所以Gin找不到对应的处理方法,返回404。

两种解决方式

方式一:调整请求路径匹配现有路由

把请求地址改成localhost:9090/user/abc,此时abc会被识别为路径参数,context.Param("username")就能正常拿到值,GetUser方法会被执行。

方式二:修改路由支持查询参数

如果想保留/user/?username=abc的请求形式,需要修改路由定义,同时调整参数获取方式:

func main() {
    router := gin.Default()

    router.POST("/user", controllers.CreateUser)
    router.GET("/user", GetUser) // 修改路由路径为/user
    router.HEAD("/user/:username", controllers.GetUserMeta)

    router.Run("localhost:9090")
}

func GetUser(context *gin.Context) {
    // 使用Query方法获取查询参数
    uname := context.Query("username")
    fmt.Println("received:", uname)
    // context.IndentedJSON(http.StatusOK, user)
}

简单总结:Gin中/:param对应路径参数,?key=value对应查询参数,两者的路由匹配和参数获取方式完全不同,需要根据实际需求选择对应的写法。

内容的提问来源于stack exchange,提问作者Priyanka Salunke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 01:05:18