Go语言Swagger实现为项目生成 API 文档

 更新时间:2025年03月24日 09:38:28   作者:codepzj  
Swagger 是一个基于 OpenAPI 规范设计的工具,用于为 RESTful API 生成交互式文档,下面小编就来介绍一下如何在 Go 项目中集成 Swagger,特别是结合 Gin 框架生成 API 文档

安装 Swagger

全局安装 swag CLI

swag 是 Swagger 的命令行工具,用于生成 API 文档。可以通过以下命令全局安装:

go get github.com/swaggo/swag/cmd/swag@latest
go install github.com/swaggo/swag/cmd/swag@latest

项目依赖安装

在项目中需要安装以下依赖以支持 Gin 和 Swagger 的集成:

go get github.com/swaggo/gin-swagger
go get github.com/swaggo/files
go get github.com/alecthomas/template

格式化 Swagger 注释

使用 swag fmt 命令可以格式化项目中的 Swagger 注释,确保注释符合规范:

swag fmt

使用 swag CLI 生成文档

运行以下命令生成 Swagger 文档(默认生成 docs.goswagger.jsonswagger.yaml 文件):

swag init

swag init 常用选项

选项说明默认值
--generalInfo, -g指定包含通用 API 信息的 Go 文件路径main.go
--dir, -d指定解析的目录./
--exclude排除解析的目录(多个目录用逗号分隔)
--propertyStrategy, -p结构体字段命名规则(snakecase、camelcase、pascalcase)camelcase
--output, -o输出文件目录(swagger.json、swagger.yaml 和 docs.go)./docs
--parseVendor是否解析 vendor 目录中的 Go 文件
--parseDependency是否解析依赖目录中的 Go 文件
--parseInternal是否解析 internal 包中的 Go 文件
--instanceName设置文档实例名称swagger

示例:

swag init --dir ./ --output ./docs --propertyStrategy snakecase

Swagger 注释格式

Swagger 使用声明式注释来定义 API 的元信息。以下是常用注释及其说明:

通用 API 信息

通常在 main.go 中定义,用于描述整个 API 的基本信息:

// @title Swagger Example API
// @version 1.0
// @description This is a sample server celler server.
// @termsOfService http://swagger.io/terms/
// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host localhost:8080
// @BasePath /api/v1
// @schemes http https

API 路由注释

在具体路由处理函数上方添加注释,定义该接口的行为:

// GetPostById
// @Summary 获取文章信息
// @Produce json
// @Param id path string true "文章ID"
// @Success 200 {object} Post "成功返回文章信息"
// @Failure 400 {string} string "请求参数错误"
// @Router /post/{id} [get]
func GetPostById(c *gin.Context) {
    // 函数实现
}
  • @Summary:接口简述
  • @Produce:返回的 MIME 类型
  • @Param:参数定义(格式:名称 位置 类型 是否必填 描述
  • @Success:成功响应(格式:状态码 {类型} 数据结构 描述
  • @Failure:失败响应
  • @Router:路由路径和方法

示例项目代码

以下是一个完整的示例,展示如何在 Gin 项目中集成 Swagger:

package main

import (
	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
	"strconv"
	_ "swagger/docs" // 导入生成的 Swagger 文档
)

// Post 文章结构体
type Post struct {
	ID          int64  `json:"id"`
	Title       string `json:"title"`
	Content     string `json:"content"`
	Description string `json:"description"`
}

func main() {
	r := gin.Default()
	r.GET("/post/:id", GetPostById)
	// 配置 Swagger 路由
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
	r.Run(":8080")
}

// GetPostById 获取文章信息
// @Summary 获取文章信息
// @Produce json
// @Param id path string true "文章ID"
// @Success 200 {object} Post "成功返回文章信息"
// @Failure 400 {string} string "请求参数错误"
// @Router /post/{id} [get]
func GetPostById(c *gin.Context) {
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		c.String(400, err.Error())
		return
	}
	c.JSON(200, Post{
		ID:          id,
		Title:       "codepzj",
		Content:     "测试",
		Description: "测试",
	})
}

生成并访问文档

运行 swag init 生成文档。

启动项目:go run main.go

在浏览器中访问 http://localhost:8080/swagger/index.html,即可查看交互式 API 文档。

总结

通过 swaggin-swagger,我们可以轻松为 Go 项目生成规范的 API 文档。只需要编写简单的注释,Swagger 就能自动生成交互式的文档页面,方便开发和调试。

到此这篇关于Go语言Swagger实现为项目生成 API 文档的文章就介绍到这了,更多相关Go Swagger生成API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang使用map支持高并发的方法(1000万次操作14ms)

    golang使用map支持高并发的方法(1000万次操作14ms)

    这篇文章主要介绍了golang使用map支持高并发的方法(1000万次操作14ms),本文给大家详细讲解,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • go tar包归档文件处理操作全面指南

    go tar包归档文件处理操作全面指南

    这篇文章主要为大家介绍了使用go tar包归档文件处理操作全面指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言中实现多线程定时任务的示例代码

    Go语言中实现多线程定时任务的示例代码

    本文主要介绍了Go语言中实现多线程定时任务的示例代码,使用goroutine和channel实现轻量级线程及通信,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • go实现冒泡排序算法

    go实现冒泡排序算法

    冒泡排序算法是数据结构中常用的一种算法,本文就介绍了go实现冒泡排序算法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • GO如何模拟流操作实现示例探究

    GO如何模拟流操作实现示例探究

    这篇文章主要为大家介绍了GO如何模拟流操作实现示例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Go语言实现请求超时处理的方法总结

    Go语言实现请求超时处理的方法总结

    这篇文章主要为大家详细介绍了Go语言中实现请求的超时控制的方法,主要是通过timer和timerCtx来实现请求的超时控制,希望对大家有所帮助
    2023-05-05
  • Go标准库encoding/gob的具体使用

    Go标准库encoding/gob的具体使用

    Go标准库encoding/gob实现二进制序列化与反序列化,本文主要介绍了Go标准库encoding/gob的具体使用,感兴趣的可以了解一下
    2025-06-06
  • Golang Map value不可寻址使用指针类型代替示例详解

    Golang Map value不可寻址使用指针类型代替示例详解

    这篇文章主要为大家介绍了Golang Map value不可寻址使用指针类型代替示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • golang interface{}类型转换的实现示例

    golang interface{}类型转换的实现示例

    在Go语言中,类型转换可以通过断言、显式、隐式和强制四种方式实现,针对interface{}类型转换为float32或float64,需要使用type断言或reflect包处理,感兴趣的可以了解一下
    2024-10-10
  • Go语言dolphinscheduler任务调度处理

    Go语言dolphinscheduler任务调度处理

    这篇文章主要为大家介绍了Go语言dolphinscheduler任务调度处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论