beego中get请求参数通过getstring/getint等方法获取,优先从路由参数匹配,再查查询字符串;需严格区分大小写、显式检查err,且不自动过滤xss或绑定结构体。

GetString、GetInt、GetStrings 是 Beego Controller 中最常用的数据提取方式,直接从请求体或 URL 查询参数中取值,无需手动解析。
GET 请求参数怎么取?注意 key 名匹配规则
Beego 的 GetString 等方法不区分来源——它会自动从 URL 查询字符串(?name=foo&age=25)或路由占位符(如 /user/:id:int)中查找对应 key。
-
GetString("name")能拿到?name=xxx的值,也能拿到/user/xxx中匹配到的:name(如果路由定义为/:name) - 若同时存在查询参数和路由参数且 key 相同(比如都叫
id),GetString("id")优先返回路由参数值 - 用
GetInt("age")时,如果传的是非数字(如?age=abc),会返回 error,必须显式检查;而GetString永远不报错,只返回空字符串
POST 表单数据怎么安全读取?别漏掉 enctype
HTML 表单提交 POST 数据前,必须加 enctype="multipart/form-data" 才能正确传递文件;但普通文本字段(如 username、email)即使没设这个属性,GetString 仍能读到——只是文件字段会丢失。
- 表单字段的
name属性必须和GetString("xxx")中的字符串完全一致(包括大小写) - 多选 checkbox 或 select[multiple] 要用
GetStrings("hobby"),返回[]string;用GetString只能拿到第一个值 - Beego 不自动过滤 XSS,
GetString返回的是原始输入,入库或渲染前需自行调用html.EscapeString或使用模板自动转义
文件上传怎么避免覆盖和路径穿越?
GetFile("upload_file") 返回的是内存中的 multipart.File 对象,不是磁盘路径;后续保存必须用 SaveToFile("upload_file", "static/upload/xxx.jpg"),其中第一个参数必须和 HTML 中 <input type="file" name="upload_file"> 的 name 严格一致。
-
SaveToFile的第二个参数是**相对 static 目录的路径**,不能写成../etc/passwd这类路径穿越形式,否则 Beego 会静默失败或报错 - 文件名建议重命名,例如拼接时间戳 + 原文件扩展名:
time.Now().UnixNano() + filepath.Ext(head.Filename),避免重复覆盖 - 不要在
defer file.Close()后再调用SaveToFile,因为GetFile返回的 file 已经是打开状态,SaveToFile内部会自己处理读取和关闭
struct 标签验证怎么和表单联动?别只靠前端
Beego 支持用 struct tag(如 form:"username"、valid:"Required;MinSize(2)")做服务端校验,但前提是先用 ParseForm 把请求数据映射到 struct 实例上:
type UserForm struct {
Username string `form:"username" valid:"Required;MinSize(2)"`
Age int `form:"age" valid:"Range(0,150)"`
}
func (c *UserController) Post() {
var form UserForm
if err := c.ParseForm(&form); err != nil {
// 解析失败(如类型不匹配)
return
}
if ok, err := valid.Form(&form); !ok {
// 校验失败,err 包含具体字段错误
c.Data["errors"] = err
c.TplName = "user_form.html"
return
}
// 通过校验,可入库
}
注意:ParseForm 不会自动处理文件字段,文件仍需单独用 GetFile 提取;而且 struct 字段名和 form tag 值必须与 HTML 表单的 name 对齐,否则映射为空。
enctype、以及校验通过后直接把原始 GetString 结果拼进 SQL——这三处出问题,轻则功能异常,重则被注入。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











