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"?> < ...
随机推荐
- Sql语句:数据操作
数据操作,核心是:增删改查. 其中查与增删改不同,要返回数据集,其他的只要知道是否修改成功即可,所以一般调用时,返回值不同,这点要注意. 一.查询: select sname,sdept,sage f ...
- 谷歌SRE的7条原则
谷歌SRE的7条原则 拥抱合理的风险 最大化系统的稳定性不仅毫无意义,而且会适得其反.不切实际的可靠性目标限制了新功能交付给用户的速度,而且用户通常不会注意到极端的可用性(比如99.99999%),因 ...
- verilog利用线性插值实现正弦波生成器(dds)
verilog实现线性插值实现正弦波生成器 最近在项目上遇到一个需要在低资源FPGA上实现FFT逻辑的项目,而且要求实现窗函数.对于窗函数来说,莫非是实现正弦波生成器,正弦波生成器可以利用DDS模 ...
- JAVA基础之多线程四期--线程状态
一.线程的状态 二.线程生命周期分析图 三. 阻塞状态:具有cpu执行权,更待cpu空闲 休眠状态:不具有cpu执行权,cpu空闲时,也不能使用执行权
- Spark on K8s 在vivo大数据平台的混部实战
作者:vivo 互联网大数据团队- Qin Yehai 在离线混部可以提高整体的资源利用率,不过离线Spark任务部署到混部容器集群需要做一定的改造,本文将从在离线混部中的离线任务的角度,讲述离线任务 ...
- gRPC与RPC的差异
在微服务架构日益流行的今天,远程过程调用(RPC)技术成为连接各个服务的重要桥梁.本文将详细比较传统RPC与谷歌开发的gRPC框架,通过具体示例展示它们在请求处理.数据格式.性能等方面的差异. 基本概 ...
- macOS系统:新用户更新需谨慎‼️
发个牢骚:macOS系统的更新频率真的是太快了,基本都是BUG修复.功能更新等等.每更新一次版本,偌大的安装包就要重新将各种格式安装包封装一次.小更新还好,大更新直接会影响到软件APP的使用,尤其是小 ...
- 解决 Dify 部署中 Podman WSL 容器文件权限问题
解决 Dify 部署中 Podman WSL 容器文件权限问题 在使用 Podman 进行 Dify 部署时,遇到了一个关键问题:启动服务时出现 initdb: error: could not ch ...
- 太喜欢啦,浏览器中的SQL神器:WhatTheDuck让CSV分析像聊天一样简单!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 基于DuckDB的轻量级Web应用 | 完全浏览器端运行 | 零数据泄露风险 | 支持复杂S ...
- 【记录】ChatGPT|图片预览魔法咒语魔改,使用 ChatGPT 返回大量可以跳转的链接
很早的时候,我已经留意到 ChatGPT 会以返回图片的 markdown 格式来显示图片,很可能拥有一定的图片上传功能,但是它往往会显示得有些问题.一些代码图片之类的或者风景图什么的都不是很会. 但 ...