iris 项目应使用 swaggo/swag 而非 go-swagger,因其对 go modules 和 iris 支持更稳定;需用 v12.2.0-alpha+ 版本,注释中避免 iris.context/iris.map,严格按三步(注释、swag init、挂载中间件)操作,并确保 url 配置正确且每次更新注释后重生成文档。

直接用 swaggo/swag 工具解析注释生成文档,再通过 iris-contrib/swagger 提供的中间件挂载到路由,就能让 Iris 项目自带可交互的 Swagger UI 页面。不依赖运行时扫描,也不用手动维护 YAML/JSON 文件。
为什么不能直接用 go-swagger?
go-swagger 官方工具链对 Go Modules 支持不稳定,且截至 2026 年仍无正式支持 Iris 的 generator 模块;社区主流方案已转向 swaggo/swag(即 swag CLI),它专为 Go 注释驱动的 OpenAPI 3.0 文档设计,与 Iris 兼容性好、更新活跃。
- 执行
swag init时若报错cannot find package "github.com/iris-contrib/swagger/v12",说明版本不匹配——必须用v12.2.0-alpha或更高兼容版 -
swag不解析iris.Context类型,所有响应结构需显式定义为普通 struct(如models.UserResponse),不能写iris.Map或匿名 map - 注释中
@Success 200 {object} iris.Map是无效的,会生成空 schema,导致 UI 显示 “No response defined”
关键三步:注释 + 生成 + 挂载
整个流程不涉及任何运行时反射扫描,全靠静态分析,所以快、稳、可 CI 集成。
- 在
main.go顶部添加全局 API 信息注释,例如:// @title User Management API// @version 1.0// @description This is the Iris backend for user CRUD operations.// @host localhost:8080// @BasePath /api - 在 handler 函数上方写接口级注释,注意
@Param的in字段必须明确是query、header、path或body;@Accept和@Produce必须写全 MIME 类型,如application/json - 执行
swag init -g main.go -o ./docs生成docs/swagger.json(不是 YAML);路径必须和后续中间件里swagger.Config.URL一致
挂载 Swagger UI 时容易漏掉的配置
用 iris-contrib/swagger/v12 时,默认 WrapHandler 只读取内存嵌入的 demo 文件,不加载你生成的 swagger.json —— 必须手动指定 URL 并启用 DeepLinking,否则点击接口跳转失效。
- 正确写法:
config := swagger.Config{<br> URL: "http://localhost:8080/docs/swagger.json",<br> DeepLinking: true,<br>}app.Get("/swagger/*any", swagger.CustomWrapHandler(&config, swaggerFiles.Handler)) - 如果部署在 Nginx 后面,
URL必须填公网可访问地址(如https://api.example.com/docs/swagger.json),不能写localhost -
swaggerFiles.Handler是从embed.FS加载的 UI 资源,不要替换成http.FileServer,否则 JS 报 404
最常被忽略的是:每次改完注释后必须重跑 swag init,否则浏览器看到的还是旧文档;CI 流程里建议把这步放进 make build 或 go generate,而不是靠人肉记忆。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











