我厌倦了记忆 swaggo 注释顺序,于是我做了这个

发布: (2026年1月10日 GMT+8 06:42)
4 min read
原文: Dev.to

Source: Dev.to

介绍

Swaggo 在为 Go API 编写文档方面非常强大,但它的注解参数顺序必须严格遵守,这会带来不少麻烦。每次写类似下面的代码时:

// @Param id query string true "User ID"

你都得记住确切的顺序:nameintyperequireddescription。这常常导致错误、拼写错误,以及团队 Slack 上频繁出现的 “顺序到底是怎样的?” 的求助信息。

位置参数的问题

  • 记忆负担 – 必须记住每个参数的位置。
  • 常见混淆 – 类型和 required 标志经常被调换。
  • 静默错误 – 结构体名称的拼写错误(例如 dto.UserReponse)直到运行时才会被发现。
  • 上手阻力 – 新成员需要花时间学习顺序,而不是专注于 API 逻辑。

解决方案:具名参数注解

一个 VS Code 插件让你可以使用具名参数来编写 Swaggo 注解:

@Param(name="id", in="query", type=string, required=true, desc="User ID")
@Success(code=200, schema=dto.UserResponse, desc="Success")

插件会实时把这些内容转换为普通的 Swaggo 注释,因此源文件仍然保留标准的 // @Param 语法,只是你编辑的是更易读的具名参数版本。

工作原理

  • 无需记忆顺序 – 你可以任意顺序指定键 (nameintyperequireddesc)。
  • IDE 辅助 – 注解名称和 Go 类型的自动补全,以及显示生成注释的悬停提示。
  • 代码片段 – 快速插入常用模式。
  • 实时转换 – 当你输入时,插件会更新底层注释。

示例

具名参数版本(你编辑的内容)

@Summary("Create classroom")
@Tags("classroom", "admin")
@Param(name="body", in="body", type=dto.CreateClassroomRequest, required=true, desc="Classroom creation request")
@Success(code=200, schema=dto.ClassroomResponse, desc="Success")
@Router("/classrooms", "post")
func CreateClassroom(c echo.Context) error {
    // your code
}

生成的 Swaggo 注释(文件中实际保存的内容)

// @Summary Create classroom
// @Tags classroom,admin
// @Param body body dto.CreateClassroomRequest true "Classroom creation request"
// @Success 200 {object} dto.ClassroomResponse "Success"
// @Router /classrooms [post]
func CreateClassroom(c echo.Context) error {
    // your code
}

你只需要编辑第一段代码块,插件会负责转换。

好处

  • 减少语法提问 – 新成员不再询问参数顺序。
  • 错误更少 – 代码审查中因注解格式错误产生的噪音减少。
  • 更好的 IDE 支持 – 自动补全和类型校验帮助提前捕获错误。
  • 更易重构 – IDE 能验证注解中引用的 Go 类型是否存在。

安装

在 VS Code Marketplace 中搜索 “Swaggo” 或直接安装:

  • Marketplace 链接:
  • GitHub 仓库:

限制

  • 该插件仅提供编辑器侧的便利功能;它 不会 验证引用的类型是否真实存在。此类验证仍由 Swaggo CLI 完成。
  • 目前仅支持 VS Code。若有需求,未来可能会支持其他编辑器。

结论

具名参数注解消除了记忆 Swaggo 位置参数顺序的需求,使得在 Go 中编写 Swagger 文档更快、更清晰,也更不易出错。该插件免费、兼容现有的 Swaggo 工具链,且你的代码保持 100 % 兼容。

欢迎在 GitHub 上提交 issue,提出改进建议或功能需求。祝文档编写愉快!

Back to Blog

相关文章

阅读更多 »

Go的秘密生活:并发

将混乱的 race condition 变得有序。第15章:通过通信共享。那天星期二档案异常嘈杂。不是来自声音,而是来自 t...

Go 中优雅的领域驱动设计对象

❓ 你如何在 Go 中定义你的领域对象?Go 并不是典型的面向对象语言。当你尝试实现 Domain‑Driven Design(DDD)概念,如 Entity …

轻量级跨平台 Hosts 管理工具

简介 Go Hosts 是一款使用 Go + Fyne 开发的轻量级跨平台 Hosts 管理工具,支持 Windows 与 macOS(Intel)。相较于体积庞大的 Electron 应用(如 SwitchHosts),Go Hosts 体积更小、编译打包灵活,适合对小工具有执念的用户。 - GitHub 开源地址...