beego中获取get查询参数需区分来源:url查询字符串用getstring("key")或input().get("key"),路径参数(如/user/:id)必须用getstring(":id");数值类型应优先用getint("key")等带错误返回的方法校验。

在Beego中获取GET请求的查询参数(即URL中?后的一组键值对),必须明确区分参数来源是普通查询字符串(如?id=123&name=abc)还是路由路径变量(如/user/123),二者获取方式完全不同,混用会导致取不到值。
从标准查询字符串中取值
当请求地址为 http://127.0.0.1:8080/user?id=123&name=alice&hobby=reading&hobby=swimming 时,使用以下任一方式均可获取:
方法一:直接调用 GetString 等类型安全方法idStr := c.GetString("id")name := c.GetString("name")hobbies := c.GetStrings("hobby") // 返回 []string{"reading", "swimming"}
方法二:通过 Input().Get 统一入口获取(返回 string,不校验类型)idStr := c.Input().Get("id")name := c.Input().Get("name")
注意:【GetString 和 GetInt 等方法不会自动解析 multipart/form-data 或 JSON body 中的字段,只作用于 URL 查询参数和 POST 表单(application/x-www-form-urlencoded)】。若你发起的是纯 GET 请求,就只走这一路。
从 RESTful 路由路径中取值
当路由定义为 beego.Router("/user/:id:int", &controllers.UserController{}),且访问地址为 http://127.0.0.1:8080/user/456 时,参数不在 query string 中,而嵌在路径里,必须用带冒号的键名:
第一步:确保路由注册时已声明占位符,例如 beego.Router("/user/:id:int", &controllers.UserController{})
第二步:在 Controller 方法中用 GetString(":id") 或 c.Ctx.Input.Param(":id") 获取uid := c.GetString(":id") // 返回 "456"uidInt, _ := c.GetInt(":id") // 返回 int 类型 456
这一步不能写成 c.GetString("id"),否则永远返回空字符串——因为路径参数不进入 Form 或 Query 映射表。
安全转换数值类型并处理错误
如果业务要求参数必须是整数,比如分页页码 page,直接用 GetString 拿到的是字符串,需手动转换;但更推荐一步到位用类型获取方法,它们会自动校验格式:
方法一:page, err := c.GetInt("page")
若 URL 是 ?page=abc,err 不为 nil,page 值为 0;此时应立即返回错误或设默认值。
方法二:带默认值的变体,适合可选参数limit, _ := c.GetInt("limit", 20)
当 URL 中无 limit 参数时,limit 自动取 20;但若传了非数字值(如 ?limit=xx),仍会报错,不会静默 fallback。
【GetInt 等方法返回两个值,第二个是 error,忽略它将导致程序在非法输入时 panic 或逻辑错乱】











