不能。Swagger UI 本身不支持多版本文档切换,仅能渲染单个 OpenAPI 文件;需为各版本生成独立 JSON 并部署不同路由,再通过自定义导航页或网关聚合访问。

Swagger UI 能否原生支持多版本 API 文档?
不能。swagger-ui 本身不提供「版本切换」功能,它只渲染一个 openapi.json(或 swagger.json)文件。所谓“同时展示多个版本”,本质是把不同版本的 OpenAPI 文档部署为独立入口,再由前端或网关统一聚合导航。
最稳妥的做法:为每个版本生成独立的 Swagger JSON + 独立路由
Go 服务中用 swag init 生成文档时,默认只扫当前代码(比如 // @Version v1 注释),所以多版本必须物理隔离:
- 把 v1 和 v2 的 handler、struct、注释分别放在不同包(如
api/v1和api/v2) - 在 v1 包下运行
swag init -g ./api/v1/main.go -o ./docs/v1/swagger.json - 在 v2 包下运行
swag init -g ./api/v2/main.go -o ./docs/v2/swagger.json - 启动 HTTP 服务时,静态托管两个路径:
/swagger/v1/和/swagger/v2/,都指向swagger-ui前端,但通过 URL 参数指定对应 JSON:
http://localhost:8080/swagger/v1/?url=/swagger/v1/swagger.json http://localhost:8080/swagger/v2/?url=/swagger/v2/swagger.json
注意:swag init 不会自动识别跨包注释,// @Version 只影响单个文档的 Info.Version 字段,不影响生成范围。
想在一个 UI 里切版本?得自己加导航页
官方 swagger-ui 不带版本菜单,你需要写一个轻量级 HTML 页面作为入口,例如 /swagger/:
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
立即学习“go语言免费学习笔记(深入)”;
- 页面上放两个按钮或下拉菜单,链接到上面两个带
?url=的地址 - 或者用 iframe 嵌入两个 swagger-ui 实例(不推荐,资源占用高且跨域易出问题)
- 更干净的方式是用 Nginx 或 API 网关做反向代理,把
/swagger/v1/*映射到静态文件目录,避免 Go 服务直接暴露文件系统
别试图用 go-swagger 的 --multiple 或合并 JSON —— OpenAPI 规范不支持在同一文档里定义多个根 paths 块对应不同 base path,强行合并会导致 swagger-ui 解析失败或路径错乱。
容易被忽略的关键点
@BasePath 注释必须和实际路由一致,否则生成的接口 URL 是错的;@Version 只改文档右上角显示值,不改变请求路径;v1 和 v2 的 struct 如果共用同一个 Go 类型,swag 会复用 schema ID,可能造成 v2 文档里出现 v1 的字段描述 —— 这时候得用 // @name v2.User 显式重命名 schema。

















