swag init 失效主因是路径、注释、扫描范围三者不匹配:须在 go.mod 目录执行,handler 上方需完整 // @summary 注释,分散路由要加 -d ./ 指定扫描目录。

swag init 命令不生效?先看这三件事
绝大多数 swag init 失败,不是工具没装好,而是它根本没“看见”你的接口函数。它不运行代码,只静态扫描注释和函数签名,路径、入口、注释格式缺一不可。
- 必须在项目根目录执行——即
go.mod所在目录,否则swag解析不了 import 路径,报错类似no required module provides package - 所有 handler 函数上方必须有完整注释块,且第一行是
// @Summary;中间不能空行、不能缩进、不能用/* */,否则整个函数被跳过 - 如果路由定义分散在
internal/router/等非根目录,加-d ./显式指定扫描范围,别依赖默认行为
为什么 /swagger/index.html 404?不是路由没注册,是文件没挂对
Gin 不会自动托管 docs/ 下的前端资源,router.Static("/swagger", "./docs") 是错的——Swagger UI 是单页应用(SPA),所有子路径如 /swagger/swagger-ui.css 都要由同一个 handler 处理,否则 404。
- 必须用
ginSwagger.WrapHandler(swaggerFiles.Handler),且路由写成router.GET("/swagger/*any", ...),*any不能省 - 确保
docs/docs.go已生成,并在 main 包中被 import(Gin-Swagger 依赖它读取注释元数据) - 别把
docs/当普通静态目录挂载;也别手动复制swagger.json到 public 目录下——它会被docs.go动态注入内存
@Param 和 @Success 不显示字段?问题不在函数签名,在结构体 tag
swag 不反射结构体字段,也不猜你传的是 body 还是 query,它只认注释 + json: tag。没 tag 的字段,哪怕导出、哪怕首字母大写,也不会出现在文档里。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
-
@Param id path int true "用户ID"中的path必须小写,写成Path或PATH就失效 -
@Success 200 {object} User中的User必须是导出类型,且每个字段要有json:"user_name";json:"-"字段直接跳过 - 嵌套结构体也要逐层加
json:tag,比如Address *Address `json:"address"`,否则深层字段为空 -
time.Time字段建议显式加time_format:"2006-01-02T15:04:05Z",否则文档可能显示为数字时间戳
上线后 Swagger 页面空白或加载超时?别让 docs/swagger.json 暴露出去
docs/swagger.json 是纯文本 OpenAPI 文件,里面包含所有接口路径、参数名、错误码、甚至注释里的调试说明。开发期方便,生产环境就是信息泄露风险点。
- 上线前务必移除或条件编译掉
router.GET("/swagger/*any", ...)这行注册代码 - 如果内部运维平台真需要保留,至少加 IP 白名单中间件或 Basic Auth,不能裸奔
- 用
swag init -o ./docs_prod把文档输出到独立目录,配合构建脚本排除进生产镜像,避免误打包
复杂点从来不在命令怎么敲,而在于 swag 只做静态分析——它看不到 vendor、不执行 init、不理解 interface 实现,所有依赖都得靠 go list 能解析出来。CI/CD 里记得先 go mod download,不然它连基础 struct 都找不到。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










