Swag - 将Go注释转换为Swagger文档的强大工具
项目标题与描述
Swag是一个强大的Go语言工具,能够将代码中的注释自动转换为符合Swagger 2.0规范的API文档。项目支持多种主流Go Web框架,包括Gin、Echo等,通过简单的代码注释即可生成专业的API文档。
核心价值:
- 自动化文档生成,减少手动编写工作量
- 与Swagger UI无缝集成
- 支持多种Go Web框架
- 丰富的注释功能,支持参数验证、响应模型等
功能特性
- 自动文档生成:通过解析Go代码中的特殊注释自动生成Swagger文档
- 多框架支持:支持Gin、Echo等多种流行Go Web框架
- 丰富的注释功能:
- API基本信息(标题、版本、描述等)
- 路由定义
- 参数描述(路径参数、查询参数、请求体等)
- 响应模型定义
- 安全定义(BasicAuth、APIKey、OAuth2等)
- 类型安全:支持Go基本类型和自定义类型的映射
- 扩展功能:
- 枚举类型支持
- 字段重命名
- 字段忽略
- 自定义字段类型
安装指南
基本安装
go get -u github.com/swaggo/swag/cmd/swag
项目中使用
- 在项目中添加Swag注释
- 运行命令生成文档:
swag init
依赖项
- Go 1.18+
- 支持的Web框架(如Gin、Echo等)
使用说明
基础示例
// @Summary 获取用户信息
// @Description 通过用户ID获取用户详细信息
// @Tags users
// @Accept json
// @Produce json
// @Param id path int true "用户ID"
// @Success 200 {object} model.User
// @Failure 400 {object} web.APIError
// @Failure 404 {object} web.APIError
// @Router /users/{id} [get]
func GetUser(c *gin.Context) {
// 处理逻辑
}
与Gin框架集成
package main
import (
"github.com/gin-gonic/gin"
_ "github.com/swaggo/swag/example/celler/docs"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
// @title Swagger示例API
// @version 1.0
// @description 这是一个示例服务器
func main() {
r := gin.Default()
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
r.Run(":8080")
}
核心代码
注释解析核心
// Operation描述单个API操作
type Operation struct {
parser *Parser
codeExampleFilesDir string
spec.Operation
RouterProperties []RouteProperties
State string
}
// RouteProperties描述HTTP路由属性
type RouteProperties struct {
HTTPMethod string
Path string
Deprecated bool
}
类型定义处理
// TypeSpecDef包含类型定义的完整信息
type TypeSpecDef struct {
File *ast.File // 包含TypeSpec的ast文件
TypeSpec *ast.TypeSpec // 类型定义
Enums []EnumValue // 枚举值
PkgPath string // 包路径
ParentSpec ast.Decl // 父声明
SchemaName string // Schema名称
NotUnique bool // 是否唯一
}
Swagger文档生成
// Spec保存导出的Swagger信息
type Spec struct {
Version string
Host string
BasePath string
Schemes []string
Title string
Description string
InfoInstanceName string
SwaggerTemplate string
LeftDelim string
RightDelim string
}
// ReadDoc将SwaggerTemplate解析为swagger文档
func (i *Spec) ReadDoc() string {
// 处理模板和转义字符
tpl := template.New("swagger_info").Funcs(template.FuncMap{
"marshal": func(v interface{}) string {
a, _ := json.Marshal(v)
return string(a)
},
"escape": func(v interface{}) string {
str := strings.ReplaceAll(v.(string), "\t", "\\t")
str = strings.ReplaceAll(str, "\"", "\\\"")
return strings.ReplaceAll(str, "\\\\\"", "\\\\\\\"")
},
})
// 解析并执行模板
parsed, _ := tpl.Parse(i.SwaggerTemplate)
var doc bytes.Buffer
_ = parsed.Execute(&doc, i)
return doc.String()
}
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码
Swag - 将Go注释转换为Swagger文档的强大工具的更多相关文章
- springboot成神之——swagger文档自动生成工具
本文讲解如何在spring-boot中使用swagger文档自动生成工具 目录结构 说明 依赖 SwaggerConfig 开启api界面 JSR 303注释信息 Swagger核心注释 User T ...
- 使用 Swagger 文档化和定义 RESTful API
大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Descript ...
- revel + swagger 文档也能互动啦
beego 从 1.3 后开始支持自动化API文档,不过,目测比较复杂,一直期望 revel 能有官方支持. revel 确实已经有了官方支持的计划,有可能将在 0.14 版本支持,现在才 0.11. ...
- 利用typescript生成Swagger文档
项目地址:https://github.com/wz2cool/swagger-ts-doc demo代码地址:https://github.com/wz2cool/swagger-ts-doc-de ...
- 使用sphinx快速为你python注释生成API文档
sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...
- asp.net core 2.1 生成swagger文档
新建asp.netcore2.1 api项目 “WebApplication1” 在nuget管理器中添加对Swashbuckle.AspNetCore 3.0.0.Microsoft.AspNetC ...
- Spring Boot:整合Swagger文档
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- 懒得写文档,swagger文档导出来不香吗
导航 前言 离线文档 1 保存为html 2 导出成pdf文档 3 导出成Word文档 参考 前言 早前笔者曾经写过一篇文章<研发团队,请管好你的API文档>.团队协作中,开发文档的重 ...
- Gin 如何动态生成模型 swagger 文档
在做 API 接口开发时, 一般会统一 API 返回格式, 例如 { "code": 200, "data": { //xxxxx //xxxxx }, &qu ...
- swagger文档
关键配置文件 spring boot demo pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...
随机推荐
- 学习EXTJS6(9)面向对象的基础框架-1
Ext创造一套精细的对象模型与API,用这套API,可以快速实现对象的定义.创建.继承和扩展:1. 1.创建新类 Ext.define('demo.Demo',{ name: 'usegear', h ...
- Excel百万数据如何快速导入?
前言 今天要讨论一个让无数人抓狂的话题:如何高效导入百万级Excel数据. 去年有家公司找到我,他们的电商系统遇到一个致命问题:每天需要导入20万条商品数据,但一执行就卡死,最长耗时超过3小时. 更魔 ...
- java基础之关键字(this、static、super、final、 权限修饰符)
一.this的含义 this:代表所在类的当前对象的引用(地址值),即对象自己的引用. 记住 :方法被哪个对象调用,方法中的this就代表那个对象.即谁在调用,this就代表谁 this的三种运用: ...
- 在MaxKB中实现准确的Chat TO SQL(BI)
主要面向考试成绩管理系统(目前支持旭日图.仪表盘柱状图.桑基图.漏斗图.河流图.数据聚合图.散点图.南丁格尔玫瑰图.饼状图.环形图.堆叠柱状图.堆叠折线图.堆叠面积图.面积图.折线图) 主要思路: 第 ...
- symfony里实现resfull api并实现权限控制
---------------------------------------------------------- 1.restfull api部分 注:笔记,自己摸索出来的,路子野,仅供参考. - ...
- 基于 OT-JSON 与 Immer 设计低代码/富文本场景的状态管理方案
在复杂应用中,例如低代码.富文本编辑器的场景下,数据结构的设计就显得非常重要,这种情况下的状态管理并非是redux.mobx等通用解决方案,而是需要针对具体场景进行定制化设计,那么在这里我们来尝试基于 ...
- EFCore先DBFirst,再CodeFirst(针对老项目迁移)
参照文章: CodeFirst命令介绍:Scaffold-DbContext 命令使用 - 跟着阿笨一起玩.NET - 博客园 (cnblogs.com) 整体流程介绍:NetCore 中 EFcor ...
- Java序列化:为何必须实现Serializable并显式指定serialVersionUID?
结论先行 实现Serializable接口是Java对象序列化的基本前提,没有它JVM会直接拒绝序列化操作. 显式声明serialVersionUID能彻底掌控序列化版本兼容性,避免因类结构微小改动或 ...
- <HarmonyOS第一课02>DevEco Studio的使用
视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717494752698457?ha_sou ...
- IDEA在检查更新的时候报错 Connection Error Failed to load plugins from 'https://plugins.jetbrains.com/idea': org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 3; 文档中根元素前面的标记必须格式正确。
问题: IDEA在更新的时候报错 Connection Error Failed to load plugins from 'https://plugins.jetbrains.com/idea': ...