Go利用Swag实现将注释转换为专业的API文档

 更新时间:2025年06月30日 08:46:20   作者:qife122  
Swag是一个将Go语言注释自动转换为Swagger 2.0文档的工具,支持多种流行Go Web框架,本文我们就来简单讲讲如何使用Swag将简单的代码注释生成专业的API文档的吧

Swag是一个强大的Go语言工具,能够将代码中的注释自动转换为符合Swagger 2.0规范的API文档。项目支持多种主流Go Web框架,包括Gin、Echo等,通过简单的代码注释即可生成专业的API文档。

核心价值:

  • 自动化文档生成,减少手动编写工作量
  • 与Swagger UI无缝集成
  • 支持多种Go Web框架
  • 丰富的注释功能,支持参数验证、响应模型等

功能特性

1.自动文档生成:通过解析Go代码中的特殊注释自动生成Swagger文档

2.多框架支持:支持Gin、Echo等多种流行Go Web框架

3.丰富的注释功能

  • API基本信息(标题、版本、描述等)
  • 路由定义
  • 参数描述(路径参数、查询参数、请求体等)
  • 响应模型定义
  • 安全定义(BasicAuth、APIKey、OAuth2等)

4.类型安全:支持Go基本类型和自定义类型的映射

5.扩展功能

  • 枚举类型支持
  • 字段重命名
  • 字段忽略
  • 自定义字段类型

安装指南

基本安装

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()
}

到此这篇关于Go利用Swag实现将注释转换为专业的API文档的文章就介绍到这了,更多相关Go Swag生成API文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go读取配置文件的方法总结

    Go读取配置文件的方法总结

    我们常见的配置文件的格式一般有:XML、JSON、INI、YAML、env和.properties,本文小编为大家整理了Go语言读取这些格式的配置文件的方法,希望对大家有所帮助
    2023-10-10
  • Go 语言中的命令行参数操作详解

    Go 语言中的命令行参数操作详解

    本文介绍了Go语言处理命令行参数的三种方法,包括os.Args, flag包, Cobra库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-10-10
  • 使用Go语言编写一个简单的Web框架

    使用Go语言编写一个简单的Web框架

    Go语言(又称Golang)因其高效的性能和简洁的语法,在编写Web框架方面表现出色,下面将详细介绍如何使用Go语言编写一个简单的Web框架,文中有详细的代码供大家参考,需要的朋友可以参考下
    2024-05-05
  • GO语言异常处理机制panic和recover分析

    GO语言异常处理机制panic和recover分析

    这篇文章主要介绍了GO语言异常处理机制panic和recover,分析了捕获运行时发生错误的方法,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • Mac上Go环境和VS Code的正确安装与配置方法

    Mac上Go环境和VS Code的正确安装与配置方法

    Go语言是一个新兴的语言。下面介绍一下如何在Mac系统下安装和使用这个语言,Go语言提供了mac下安装包,可直接下载安装包点击安装
    2018-03-03
  • golang框架中跨服务的最佳通信协议和工具

    golang框架中跨服务的最佳通信协议和工具

    在 go 框架中实现跨服务通信的最佳实践包括使用 grpc(适用于低延迟高吞吐量)、http 客户端(适用于 restful api)和消息队列(适用于异步解耦通信),在选择通信方式时,应考虑服务交互模式、性能要求和部署环境等因素
    2024-06-06
  • go1.21中slog日志包用法入门

    go1.21中slog日志包用法入门

    go1.21中,slog这一被Go语言团队精心设计的结构化日志包正式落地,本文将带领读者上手slog,体会其与传统log的差异,感兴趣的小伙伴快跟随小编一起学习一下吧
    2023-09-09
  • golang log4go的日志输出优化详解

    golang log4go的日志输出优化详解

    log4go源于google的一项log工程,但官方已经停止维护更新,下面这篇文章主要给大家介绍了关于golang log4go的日志输出优化的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • Go 防止 goroutine 泄露的方法

    Go 防止 goroutine 泄露的方法

    Go 的并发模型与其他语言不同,虽说它简化了并发程序的开发难度,但如果不了解使用方法,常常会遇到 goroutine 泄露的问题。本篇主要从如何写出正确代码的角度来介绍如何防止 goroutine 的泄露,需要的朋友可以参考下
    2019-09-09
  • Golang 编译成DLL文件的操作

    Golang 编译成DLL文件的操作

    这篇文章主要介绍了Golang 编译成DLL文件的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05

最新评论