Golang使用Swag搭建api文档

1. 简介

GinGolang目前最为常用的Web框架之一。

公司项目验收需要API接口设计说明书(Golang后端服务基于Gin框架编写),编写任务自然就落到了我们研发人员身上。

项目经理提供了文档模板,让我们参考模板来手动编写,要求两天内完成,时间紧任务重。

看了下文档中API接口设计内容,很简单,但是接口数量太多还需要调整文档格式,手动编写两天肯定搞不定。

发现API接口设计内容和swagger文档格式很相近,那能不能使用工具生成swagger文档后再转换为word格式呢?

和项目经理沟通了我的想法,项目经理回答说,内容丰富、格式统一就行,不要求完全参考模板中的格式来。

既然这样,那就开干吧!

2. 生成swagger.json文档

本章节仅为演示操作步骤,编写得很简洁。如果需要进一步的了解请查阅【[4. 参考资料](#4. 参考资料)】章节

2.1. 安装swag

首先需要安装swag命令行工具:go install github.com/swaggo/swag/cmd/swag@latest

2.2. 新建示例项目

比如新建swagdoc项目:go mod init swagedoc

2.3. 新建main.go文件并输入示例代码

go 复制代码
package main

import (
    "net/http"

    "swagdoc/docs"

    "github.com/gin-gonic/gin"
    swaggerfiles "github.com/swaggo/files"
    ginSwagger "github.com/swaggo/gin-swagger"
)

// @BasePath /api/v1

// PingExample godoc
// @Summary ping example
// @Schemes
// @Description do ping
// @Tags example
// @Accept json
// @Produce json
// @Success 200 {string} Helloworld
// @Router /example/helloworld [get]
func Helloworld(g *gin.Context) {
    g.JSON(http.StatusOK, "helloworld")
}

func main() {
    r := gin.Default()
    docs.SwaggerInfo.BasePath = "/api/v1"
    v1 := r.Group("/api/v1")
    {
        eg := v1.Group("/example")
        {
            eg.GET("/helloworld", Helloworld)
        }
    }
    r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
    r.Run(":8080")
}

2.4. 生成swagger.json文档

执行命令swagger init命令生成swagger.json文档。文件目录结构如下图所示:

2.5. 访问api文档

执行下列命令运行示例程序:

shell 复制代码
go mod tidy
go run ./main.go

在浏览器中访问 api文档

可以通过浏览器直接访问api:

3. 常见问题

3.1. Error parsing type definition报错如何解决?

若出现解析类型定义的错误,需要在执行swage init时加上对应的选项:

例如:swag init --parseDependency --parseInternal

3.2. 如何编写api注释?

参考 声明式注释格式

4. 将swagger.json文档转换为word文档

可以使用 swagger转word文档在线工具 来进行转换。

如果在线工具不能使用,可以自行参考网上教程在本地搭建转换工具来进行转换,就不在此赘述了。

转换后的word文档效果图如下所示:

5. 参考资料

如何使用Swag将Go的注释转换为Swagger文档?

源码示例

相关推荐
河边小咸鱼28 分钟前
pdd校招实习生内推【实时更新链接】2027届实习、2026届春招
java·c++·golang
Java面试题总结3 小时前
Go运行时系统解析: runtime包深度指南
开发语言·后端·golang
有浔则灵4 小时前
Go 语言 net/http 包详解:从入门到实战
http·golang·xcode
ん贤5 小时前
一文读懂 Go-Eino 的 Embedding
开发语言·golang·embedding
AMoon丶19 小时前
Golang--多种数据结构详解
linux·c语言·开发语言·数据结构·c++·后端·golang
不会写DN1 天前
Golang中实时推送的功臣 - WebSocket
开发语言·后端·golang
`Jay1 天前
高并发数据采集:隧道代理池架构设计与实现
爬虫·python·学习·golang·代理模式
AMoon丶1 天前
Golang--多种控制结构详解
java·linux·c语言·开发语言·后端·青少年编程·golang
不会写DN1 天前
Go中的泛型与any、interface有什么区别?
开发语言·后端·golang
无心水1 天前
【文档解析】4、跨平台文档解析:JS/Go/C#全攻略
javascript·后端·golang·c#·架构师·大数据分析·分布式系统利器