swaggo使用教程

news2024/11/25 21:21:09

安装与初始化

  1. 安装插件

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

  1. 安装依赖

go get -u github.com/swaggo/swag/cmd/swag

  1. 在包含main.go文件的项目根目录运行swag init。这将会解析注释并生成需要的文件(docs文件夹和docs/docs.go)。

swag init

一定要在main.go的统计目录下,不然会出现如下错误:

在这里插入图片描述
切换到main.go统计目录后重新生成:

在这里插入图片描述
生成了一个docs目录

在这里插入图片描述
在这里插入图片描述
上述文件是根据swagger的注解生成的,虽然现在还没有swagger的注解,但是会生成默认的文件。

在项目开发时显然所有的api不可能写在一个go源文件中,就可以统一生成

swag init -g http/api.go

  1. 也可以使用fmt格式化swagger注解

swag fmt

基本命令

swag init -h
NAME:
   swag init - Create docs.go

USAGE:
   swag init [command options] [arguments...]

OPTIONS:
   --generalInfo value, -g value          API通用信息所在的go源文件路径,如果是相对路径则基于API解析目录 (默认: "main.go")
   --dir value, -d value                  API解析目录 (默认: "./")
   --exclude value                        解析扫描时排除的目录,多个目录可用逗号分隔(默认:空)
   --propertyStrategy value, -p value     结构体字段命名规则,三种:snakecase,camelcase,pascalcase (默认: "camelcase")
   --output value, -o value               文件(swagger.json, swagger.yaml and doc.go)输出目录 (默认: "./docs")
   --parseVendor                          是否解析vendor目录里的go源文件,默认不
   --parseDependency                      是否解析依赖目录中的go源文件,默认不
   --markdownFiles value, --md value      指定API的描述信息所使用的markdown文件所在的目录
   --generatedTime                        是否输出时间到输出文件docs.go的顶部,默认是
   --codeExampleFiles value, --cef value  解析包含用于 x-codeSamples 扩展的代码示例文件的文件夹,默认禁用
   --parseInternal                        解析 internal 包中的go文件,默认禁用
   --parseDepth value                     依赖解析深度 (默认: 100)
   --instanceName value                   设置文档实例名 (默认: "swagger")

swag fmt -h
NAME:
   swag fmt - format swag comments

USAGE:
   swag fmt [command options] [arguments...]

OPTIONS:
   --dir value, -d value          API解析目录 (默认: "./")
   --exclude value                解析扫描时排除的目录,多个目录可用逗号分隔(默认:空)
   --generalInfo value, -g value  API通用信息所在的go源文件路径,如果是相对路径则基于API解析目录 (默认: "main.go")
   --help, -h                     show help (default: false)

swagger主键嵌入接口

swagger一般都是通过通过源码嵌入到接口上,用于生成接口的在线测试页面及api文档。

swago的常用注解,已注释的形式嵌入到go源码中,如下

// @Summary 接口简介:获取hello方法
// @Description 接口描述:这是一个没有入参,出参为hello信息的接口
// @Tags 测试
// @Accept json
// @Produce json
// @Param user_id path string true "用户ID" minlength(1) maxlength(100)
// @Success 200 {object} Response
// @Failure 400 {object} Response
// @Failure 404 {string} string "{"msg":"找不到路径了0.0"}"
// @Failure 500 {object} Response
// @Router /hello [get] --> 路由地址和请求方法
  • @Summary,接口简介
  • @Description,接口描述
  • @Tags,接口的标签,用来给 API 分组的
  • @Accept,接口接收入参的类型,支持mpfd(表单),json 等
  • @Produce,接口返回的出参类型,支持mpfd(表单),json 等
  • @Param,入参参数定义
  • @Success,指定成功响应的数据,格式为 1.HTTP响应码 2.响应参数类型 3.响应数据类型 4.其它描述
  • @Failure,失败响应后的数据,和 Success 一样
  • @Router,指定路由和 HTTP 方法

原生net/http库使用swag

github地址https://github.com/swaggo/http-swagger

仅仅下载sawg只能生成api文档,不能生成在线文档并在线测试,因此还需要下载特定的依赖,用于整合web接口服务。

对于原生的net/httpswago官方提供了github.com/swaggo/http-swagger用于生成在线api文档。

  1. http=swagger下载依赖

go get -u github.com/swaggo/http-swagger

  1. 引入依赖

import "github.com/swaggo/http-swagger"

  1. 下载基于http接口注释生成在线api的依赖

go get github.com/swaggo/http-swagger/example/go-chi/docs

  1. 下载在线api测试服务器的依赖

go get github.com/go-chi/chi

使用整合swagger的httpSwagger编写api接口,并使用swagger注释,代码如下:

package main

import (
	"net/http"

	"github.com/go-chi/chi"
	httpSwagger "github.com/swaggo/http-swagger"
	_ "github.com/swaggo/http-swagger/example/go-chi/docs" // docs is generated by Swag CLI, you have to import it.
)

// @title Swagger Example API
// @version 1.0
// @description This is a sample server Petstore 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 petstore.swagger.io
// @BasePath /v2
func main() {
	r := chi.NewRouter()
	r.Get("/swagger/*", httpSwagger.Handler(
		httpSwagger.URL("http://localhost:1323/swagger/doc.json"), //The url pointing to API definition
	))

	http.ListenAndServe(":1323", r)
}

  1. 访问swagger在线api,任何sawgger结合的api接口在线了地址都是http://ip:端口/swagger/index.html

在这里插入图片描述

swaggo支持若干很多web框架,具体请移步swag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速构建你的AI开放平台?一步步教你!

目录 楔子成品展示后台页面面客端页面成品项目地址 项目源码地址one-apichatgpt-next-web 搭建步骤搭建one-api运行命令命令解释后台配置 搭建chatgpt-next-web运行命令命令解释面客端配置 总结 ✨这里是第七人格的博客✨小七,欢迎您的到来~✨ 🍅系列专栏…

第22章_瑞萨MCU零基础入门系列教程之DMA控制器

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

nginx配置vue前端代理

背景:做一个前后端分离的项目,我这里是vue3 view ts创建的前端项目,在前端配置跨域请求。 一、开发阶段 在vue.config.js中配置devserver的proxy进行代理请求配置,然后将所有请求改为/api开头的即可。但是这样配置只在开发阶段…

数仓主题域和数据域、雪花模型,星型模型和星座模型

数仓模型和领域划分 一、主题域和数据域的差别二、雪花模型,星座模型和星型模型 一、主题域和数据域的差别 明确数据域作为数仓搭建的重要一环,能够让数仓的数据便于管理和应用。 数据域和主题域都是数据仓库中的重要概念,但含义略有不同&am…

【计算机视觉 | 图像模型】常见的计算机视觉 image model(CNNs Transformers) 的介绍合集(四)

文章目录 一、ResNeSt二、ShuffleNet v2三、FBNet四、Inception-v4五、ResNet-D六、MetaFormer七、PyramidNet八、RevNet九、Convolutional Vision Transformer(CVT)十、Tokens-To-Token Vision Transformer十一、Self-Attention Network十二、MixNet十三…

高速电路设计笔记----第二章

本章主要讲解的是电阻、电容、电感的选型。 一、电阻:关键还是限流。 1、通常在电源滤波时除了LC外,还会串接一个R。目的是为了降低信号的Q值,防止信号失真。常用于失真电源滤波。(例如时钟电源滤波) 2、选型的电阻的…

眺望数据应用新态势|第八届腾讯云Techo TVP开发者峰会圆满落幕

引言 在数据驱动的时代,如何有效地利用大数据已经成为了各个行业的重要课题。而随着云计算、人工智能等新兴技术的蓬勃发展,数据技术也随之不断生长并呈现出新的趋势与特点,企业该如何把握数据技术的新脉络,从而洞察数据背后的价…

【动态规划刷题 14】最长递增子序列 摆动序列

673. 最长递增子序列的个数 链接: 673. 最长递增子序列的个数 给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4,…

【校招VIP】产品工作难点之如何平衡团队协作

考点介绍: 对于简历上有实习经验的同学,团队配合和项目推进是一个非常常见的提问点。产品经理经常会面临项目延期,无法上线的情况。基于此,产品经理应该做些什么来保障项目按时上线呢? 产品工作难点之如何平衡团队协作-相关题目…

Linux下创建普通用户遇到的问题及解决办法

在Linux下只有root一个超级用户,但是可以创建多个普通用户的,具体的创建方法如下。 先切换到root用户,使用下面的命令创建用户名为user1(本文均以此用户名为例,注意后续键入指令时不要弄错了)的普通用户。 su root useradd user1 …

interview4-集合篇

一、算法复杂度分析 为什么要进行复杂度分析?因为可以指导你编写出性能更优的代码和评判别人写的代码的好坏。 (1)时间复杂度分析 时间复杂度是用来评估代码的执行耗时的。 1.假如每行代码的执行耗时一样:1ms 2.分析这段代码总…

跟随算网超人,深度解析算力网络!

随着数字时代全面开启 算力网络已成为当下热点议题 作为信息社会两大基石 算力、网络为何如此重要? 又将如何影响社会发展脉动? 为帮助大家深入了解算力网络 我们特别推出“算网超人”系列科普 下面,请跟随算网超人的步伐 来到该系列的…

uni-app H5使用 tabbars切换,echartst图表变小 宽度只有100px问题解决

问题: 跳转到别tabbars页面之后,再回来,echarts图显示缩小小团子。 原因分析: 在tabs切换中有echarts的话,我们会发现初始化的那个echarts是有宽度的,当点击tabs切换之后,切换过来的echarts只…

Python+requests编写的自动化测试项目

框架产生目的:公司走的是敏捷开发模式,编写这种框架是为了能够满足当前这种发展模式,用于前后端联调之前(后端开发完接口,前端还没有将业务处理完毕的时候)以及日后回归阶段,方便为自己腾出学(m…

Biome-BGC生态系统模型与Python融合技术:揭秘未来生态预测新趋势

Biome-BGC是利用站点描述数据、气象数据和植被生理生态参数,模拟日尺度碳、水和氮通量的有效模型,其研究的空间尺度可以从点尺度扩展到陆地生态系统。 在Biome-BGC模型中,对于碳的生物量积累,采用光合酶促反应机理模型计算出每天…

手机提词器有哪些?简单介绍这一款

手机提词器有哪些?手机提词器在现代社会中越来越受欢迎,原因是它可以帮助人们提高演讲和朗读的效果。使用手机提词器可以让人们更加自信地面对演讲和朗读,不至于出现口误或读错字的情况。此外,手机提词器还可以帮助人们节省时间和…

了解稀疏数组

稀疏数组(一种数据结构) package com.mypackage.array;public class Demo08 {public static void main(String[] args) {//1.创建一个二维数组 11*11// 0:没有棋子 1:黑棋 2:白棋int[][] array1 new int[11][11];…

OpenCV(四十一):图像分割-分水岭法

1.分水岭方法介绍 OpenCV 提供了分水岭算法(Watershed Algorithm)的实现, 使用分水岭算法对图像进行分割,将图像的不同区域分割成互不干扰的区域。分水岭算法模拟了水在图像中的扩散和聚集过程,将标记的边界被看作是阻…

Android Shadow 插件化原理演示

工程目录图 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:LearnShadow

【Linux指令】Centos7 touch修改Access/Modify/Change 时间与恢复系统时间

文章目录 前言正文1. 查看文件状态2.只更新Access Time2.只更新Modify Time3. 修改Acess Time 与Modify Time为指定时间4. 修改Change时间5. 恢复系统时间 总结 前言 本篇主要讲解touch与时间相关的操作,关于touch创建文件,就不再赘述。 正文 1. 查看…