Skip to content

附录B:Gin 常见错误排查指南 ​

路由错误 ​

错误原因解决
路由不匹配(404)路径拼错或方法不对检查路径和方法,用 r.Routes() 查看
路由冲突 panic同名参数路由冲突用静态路由 or 合并路径
静态文件路由冲突/static 同时是路由和静态文件改路径前缀

参数绑定错误 ​

错误原因解决
ShouldBindJSON 失败Content-Type 不是 JSON确认 Content-Type: application/json
ShouldBindQuery 取不到值标签写了 json 而不是 form查询参数用 form 标签
ShouldBind 取不到 JSON 值结构体没写 json 标签同时写 json 和 form
结构体字段为空字段首字母小写(未导出)首字母大写

验证错误 ​

错误原因解决
验证信息是英文默认英文 validator注册中文翻译器
int 类型 required 不生效0 是零值,validator 认为没传用指针 *int 或 gte=0
验证标签没反应标签写错了(空格、逗号)检查标签格式

响应错误 ​

错误原因解决
Headers were already written多次写响应Abort 后 return 或检查逻辑
JSON 字段名大写没写 json 标签字段加 json:"field_name"
JSON 包含密码json:"password"改为 json:"-"

CORS 错误 ​

错误原因解决
CORS header 缺失没加 CORS 中间件加 CORS 中间件
CORS 还是报错中间件顺序:CORS 在 Auth 前面CORS 放最外层
Credentials + * 冲突Allow-Origin 不能是*指定具体 Origin
OPTIONS 请求 401Auth 中间件拦截了预检请求CORS 在 Auth 之前

中间件错误 ​

错误原因解决
中间件不生效注册顺序错了中间件在路由前注册
c.Next() 后代码仍执行这是正常的(洋葱模型后置)需要的话用 return
c.Abort() 后还在执行Abort 只是标记,不自动 returnAbort 后必须手动 return
c.Set/Get 取不到值key 冲突被覆盖用有命名空间的 key

文件上传错误 ​

错误原因解决
文件保存失败uploads 目录不存在os.MkdirAll("./uploads", 0755)
文件太大超过 MaxMultipartMemory调大限制或用分片上传
多文件上传读不到字段名不对检查 FormFile 的字段名

生产部署错误 ​

错误原因解决
客户端 IP 全是 127.0.0.1在 Nginx 后面r.SetTrustedProxies() + Nginx 设 X-Forwarded-For
Ctrl+C 请求被中断没优雅关闭用 srv.Shutdown
连接数爆了没设超时设 ReadTimeout/WriteTimeout/IdleTimeout

把零散知识,整理成可以反复走的路。