Golang使用Swagger文档教程

Golang开发效率是杠杠滴,简单几行代码就可完成一个可用的服务,如下代码:

  • 采用Gin作为web framework
  • 采用Gorm作为持久化ORM
  • 采用Swagger作为OpenAPI文档管理工具
package mainimport ("encoding/csv""fmt""os""strconv""time"_ "export/docs""github.com/gin-gonic/gin"swaggerFiles "github.com/swaggo/files"ginSwagger "github.com/swaggo/gin-swagger""gorm.io/driver/mysql""gorm.io/gorm"
)type Detail struct {Id        intName      stringFirstTime time.TimeLastTime  time.Time
}// @title NeoApi Swagger 标题
// @version 1.0 版本
// @description NeoApi Service 描述
// @BasePath /api  基础路径
// @query.collection.format multi
func main() {r := gin.Default()r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))r.GET("/api/export", export)r.POST("/api/data", func(c *gin.Context) {c.JSON(200, gin.H{"message": "success",})})r.Run("0.0.0.0:9527")
}// @Summary 导出数据
// @Description 导出数据
// @Accept json
// @Produce json
// @Success 200 string string "success"
// @Router /api/export [get]
func export(c *gin.Context) {dsn := "dev:123456@tcp(192.168.1.203:33306)/menshen?charset=utf8mb4&parseTime=true"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {panic("failed to connect database")}var persons []uintdb.Raw("select id from person").Scan(&persons)fmt.Println(persons)month := 3monthFile := "08.csv"csvfile, err := os.Create(monthFile)if err != nil {fmt.Println("Error:", err)return}defer csvfile.Close()for _, id := range persons {var data []Detail// 注意 Gorm 字段映射默认严格驼峰命名,否则取不到值db.Raw(`select s.person_id as id, s.person_name as name, min(s.origin_time) as first_time, max(s.origin_time) as last_time from (select person_id, person_name, origin_time, date_format(origin_time, '%d') as day FROM event_recordwhere person_id=? and primary_type=100 and PERIOD_DIFF(date_format(now( ), '%Y%m'), date_format(origin_time, '%Y%m'))=?) s group by s.day`, id, month).Scan(&data)writer := csv.NewWriter(csvfile)for _, da := range data {record := []string{strconv.Itoa(da.Id), da.Name, da.FirstTime.Format("2006-01-02 15:04:05"), da.LastTime.Format("2006-01-02 15:04:05")}err := writer.Write(record)if err != nil {fmt.Println("Error:", err)return}}writer.Flush()}c.JSON(200, gin.H{"message": "export success",})
}

简单介绍一下Swagger的使用。

首先导入swagger相关的包

	swaggerFiles "github.com/swaggo/files"ginSwagger "github.com/swaggo/gin-swagger"_ "export/docs"
  1. swaggerFiles和ginSwagger是swaggo库提供
  2. export/docs是swag命令生成的本地API文档源代码(export是我的项目名称),在golang里面只需要docs.go,如下:

其次,想要生成swagger文档也非常简单,

  1. 安装swag命令行工具:go get github.com/swaggo/swag/cmd/swag@v1.8.12
  2. 编写项目的swagger注释文档,详见swagger README
  3. 执行生成命令:swag init 在项目docs目录下生成相关文件

 然后,为swagger注册gin路由

	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

最后,启动服务,访问地址:Swagger UI 即可,如果想查看json格式的文档,可访问地址:localhost:9527/swagger/doc.json

 

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

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

相关文章

【Linux | 编程实践】防火墙 (网络无法访问)解决方案 Vim常用快捷键命令

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

LeetCode | 226. 翻转二叉树

LeetCode | 226. 翻转二叉树 OJ链接 不为空就翻转,空空就停止翻转左子树的节点给了右子树右子树的节点给了左就完成了翻转 struct TreeNode* invertTree(struct TreeNode* root) {//不为空就进行翻转if(root){//翻转struct TreeNode* tmp root->left;root->…

计算机网络安全问题分析与防护措施研究

计算机网络安全问题分析与防护措施研究 【摘要】在信息技术快速发展的今天,网络对于人类的生活方式影响显著增强,网络技术快速地在社会各个领域普及,使得计算机网络的安全成为一个亟待解决的问题。如何能够保证网络的快速健康发展己成为研究…

数据库之 redis

前言: 就学习爬虫而言,对于三种常见的数据库做个基本了解足以,所以笔记都是浅尝辄止,不会涉及太深入的东西。 redis简介 Redis(Remote Dictionary Server ,远程字典服务) 是一个使用ANSI C编写…

简单可行的SeruatV4的安装方案

目前Seurat的版本从V4升级到了V5,由于一些变化,导致当年取巧,使用获取数据的方法都无法在V5中使用。 建议在操作前重启下Rstudio(或更确切的说是R)!!! 那么如何确保自己能够安装V4的…

活动回顾|德州仪器嵌入式技术创新发展研讨会(上海站)成功举办,信驰达科技携手TI推动技术创新

2023年11月28日,德州仪器(TI)嵌入式技术创新发展研讨会在上海顺利举办。作为TI中国第三方IDH,深圳市信驰达科技有限公司受邀参加,并设置展位,展出CC2340系列低功耗蓝牙模块及TPMS、蓝牙数字钥匙解决方案,与众多业内伙伴…

Vue框架学习笔记——列表渲染:v-for

文章目录 前文提要代码正文 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 主要学习链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 代码正文 <body><div id"box"><ul><li v-for"(p,index)…

Synchronized关键字的底层原理

Synchronized实现 Synchronized创建的时候一个互斥的对象锁&#xff0c;每次只有一个线程可以获取该锁。 其底层主要是基于Monitor实现的&#xff0c;在对象的对象头中存储了MarkWord存储的就是Monitor的地址。 对象的内存结构 对象在内存中存储主要分为三个部分&#xff1a…

聊一聊大模型 | 京东云技术团队

事情还得从ChatGPT说起。 2022年12月OpenAI发布了自然语言生成模型ChatGPT&#xff0c;一个可以基于用户输入文本自动生成回答的人工智能体。它有着赶超人类的自然对话程度以及逆天的学识。一时间引爆了整个人工智能界&#xff0c;各大巨头也纷纷跟进发布了自家的大模型&#…

电动车刷卡-CI522方案

Ci522是一颗工作在13.56MHz频率下的非接触式读写芯片&#xff0c;支持读A卡&#xff08;CI523支持读A/B卡&#xff09;&#xff0c;可做智能门锁、电动车NFC一键启动、玩具NFC开锁等应用。为部分要求低成本&#xff0c;PCB小体积的产品提供了可靠的选择。 Ci522与Si522/MFRC52…

IDEA插件MybatisLog Free失效,不打印日志解决

因为此插件是基于mybatis的本地日志打印基础上操作的,所以检查是否配置日志输出版本. 如果使用的是mybatis-plus框架检查是否有下面语句 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 如果使用的是mybatis框架检查是否有下面语…

巧用JAVA自带的API解决日期类问题

文章目录 题目代码优势 题目 特殊日期 代码 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 import java.time.LocalDate; public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代…

Python更改YOLOv5、v7、v8,实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

1. 前提 效果图 不错的链接&#xff1a;YOLOV7训练模型分析 关于map的绘图、loss绘图&#xff0c;可参考&#xff1a;根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图 v5、v8调用val.py&#xff0c;v7调用test.py&#xff08;作用都是一样的&#xff0c;都是…

基于Linux的网络防火墙设计方法

摘要 随着Internet的迅速发展&#xff0c;网络越来越成为了人们日常生活不可或缺的一部分&#xff0c;而随之引出的网络安全问题也越来越突出&#xff0c;成为人们不得不关注的问题。 为了在一个不安全的网际环境中构造出一个相对安全的环境&#xff0c;保证子网环境下的计算机…

行业分析:2023年木炭行业市场需求及发展前景

木炭是一种燃料名称。是木材或木质原料经过不完全燃烧&#xff0c;或者在隔绝空气的条件下热解&#xff0c;所残留的深褐色或黑色多孔固体燃料。木炭产品主要分为白炭、黑炭、活性炭、机制炭等四大类。 木炭是保持木材原来构造和孔内残留焦油的不纯的无定形碳。中国商代的青铜器…

【每日OJ —— 101. 对称二叉树】

每日OJ —— 101. 对称二叉树 1.题目&#xff1a;101. 对称二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;101. 对称二叉树 2.解法 2.1.算法讲解 1.该题是判断二叉树是否对称&#xff0c;关键在于&#xff0c;左子树等于右子树&#xff0c;而所给的…

Java手写字典树(Trie树),实现敏感词过滤

1.简介 字典树&#xff1a;也叫做前缀树&#xff0c;是一种高效的存储、配对字符串的数据结构&#xff0c;存储过程如下&#xff1a; 假设我们有单词&#xff1a;app、apple、cat。如果存在链表中&#xff1a; ["app"、"apple"、"api"、"…

Linux 文件查找

1 文件查找 在文件系统上查找符合条件的文件 文件查找&#xff1a;locate&#xff0c;find 1.1 locate 工作特点&#xff1a; 格式&#xff1a; Usage: locate [OPTION]... [PATTERN]...常用选项&#xff1a; -i &#xff1a;不区分大小写的搜索 -n N &#xff1a;只列举前…

python程序将部分文件复制到指定目录

geotools-28.2中的lib一共有264个jar包&#xff0c;但我只想将部分100个左右jar包引导我的环境中&#xff0c;那个就需要从目录中找出想要的那100个jar&#xff0c;手动挑选太费时间&#xff0c;我简单的写了个小脚本来实现。 我将想要的jar文件名和路径存放到txt中&#xff0…

Python编程的经典示例及应用

前言 Python作为一种简洁而强大的编程语言&#xff0c;提供了许多经典示例以展示其语言特性和功能。在本文中&#xff0c;我们将探讨一些经典的Python示例&#xff0c;并展示它们在实际应用中的价值。通过这些示例&#xff0c;读者可以深入了解Python的灵活性和易用性&#xff…