gin ip 和 本地访问的结果不一样_golang web开发——gin实战之整合swagger

背景

如果我们之前搞过java web开发,我们应该都知道swagger这个API文档自动生成利器,有了swagger可以方便我们与客户端的联调,基本上是一目了然,swagger支持java,自然它也能支持golang的gin框架,本小节,就花费5分钟的时间,快速整合一下gin和swagger,我们将在上一个分层的gin实战基础上,我们开始整合swagger

bf30a64e46a4c099d0eadcc8160feb1c.png

swagger

swagger的github地址

https://github.com/swaggo/gin-swagger

Step1

打开我们上一个小节搭建的工程,整体结构图如下图所示

383f9f5a90dc7fb9540dee2bf30143ac.png

项目骨架图

我们打开goland的一个终端,运行如下命令

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

6cbdf349b9416a5822197508e57e4832.png

在沒有报错的情况下,再运行swag init

a7a6f76ad04708362c3895a38408629b.png

这个时候你会发现你的项目中多了一个文件夹

87c94079f9c092d889fbd3bc1af4864f.png

Step2

在完成Step1之后,swagger的依赖基本上我们都有了,接下来,我们就要gin对swagger的url映射,或者我们在访问浏览器的时候,我们怎么知道对应请求Swagger页面的URL呢,我们回到我们之前配置映射的地方,如下图所示,我们一开始只有一个对/movie/get/:id的依赖,接下来我们要新增对swagger的映射

350c6104937f3aa0e1077b800371b6d8.png

修改一下,代码编程如下,这个一般是固定格式,但是我们也要稍微了解一下其中的原理,其实并不复杂,如下代码所示,下面第二处标红的表示,我们多加一个GET映射,以/swagger前缀开头的都交给你ginSwagger.WrapHandler这个处理器处理

1f68ba287421accf401a1c56d9142406.png

好了,到此我们重新运行一下swag init,然后打开浏览器访问如下地址

http://localhost:8080/swagger/index.html

34f445b49f9f73c9bf293d24e00611df.png

到此为止,我们已经初步看到了swagger的熟悉的页面了,虽然有报错,但这是我们前进的一大步,接下来我们一步步进行润色就可以了

Step3

我们为我们的swagger新增标题和说明,在golang中,我们只需要写一些注解就可以达到上述的效果,我们在main函数中,增加如下的注释和引入一下swagger doc的依赖,如下所示,重新运行swag init

baa9df20dbf4b47e4ce66913562036c9.png

重启项目,再次打开浏览器,再次访问上述网址,我们发现项目不再报错,也可以看到该文档的一些基本信息

e554a68554035ec9b080c1db11ab82ea.png

不报错的swagger页面

Step4

为/movie/get/:id 新增接口说明,在spring mvc中,我们可以在接口方法上加一些注解,然后在入参和出参上加一些特定注解,说明参数含义,然后swagger就会自动帮助我们变成接口说明,在golang中也是一样,我们再handlers中的各个func上加注释,而不是加注解,也可以完成一样的工作,我们在GetMovieById上加上如下的注释,然后再次运行swag init就可以完成第一个接口说明了

8be549597122211e716e683f03fdbf8f.png

重启系统,然后再次访问浏览器,我们可以看到最后的成果就出来了

8ea6235e76b676702eee1f6179c8c2e4.png

并且我们可以成功的在里面请求我们的系统接口了

93c8fad56f614a902c0d579526a1ee3d.png

小结

简而言之,golang版的swagger还是比较易懂好用,并且容易上手的,但是我们每次修改完注释,都要重新swag init重新生成最新的文档说明,这个也是我们要做注意的,下一个小节,我们将完整的编写关于电影数据库的增删改查的功能

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

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

相关文章

常用运算符和表达式

运算符在程序中应用广泛,尤其在计算功能中,常常需要大量的运算符。运算符结合操作数,便形成了表达式,并返回运算结果。 一. 运算符 1.算术运算符 算术运算符用于对数值数据进行计算。 在C#语言中,根据两个操作数的类型…

python爬取淘宝数据魔方_淘宝数据魔方技术架构解析

淘宝网拥有国内最具商业价值的海量数据。截至当前,每天有超过30亿的店铺、商品浏览记录,10亿在线商品数,上千万的成交、收藏和评价数据。如何从这些数据中挖掘出真正的商业价值,进而帮助淘宝、商家进行企业的数据化运营&#xff0…

opencv 处理黑夜_1.1 OpenCV+Python引言篇(一)

OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库。无论你是做科学研究,还是商业应用,OpenCV都可以作为你理想的工具库,因为,对于这两者,它完全是免费的。该库采用C及C语言编写,可以在windows, l…

python字典导入mongodb_python连接mongoDB进行数据提取→常用操作指南

1. 连接mongo需要知道mongoDB的地址、端口、授权用户、授权密码。一般情况下,技术都会给到数据分析人员这些信息。python没有安装模块pymongo模块的,在cmd里面,pip install pymongo 进行安装。(具体操作可以自行百度)##导入连接mongo需要的模…

解决C语言程序报错:return type defaults to‘int’

下面是通过自定义一个函数printN,之后在main函数中调用printN,使得可以通过输入整数N,将从1到N的全部整数都打印出来的程序。 但是在编译过程中却报错: return type defaults to ‘int’ 产生报错的原因: printN的默认…

cif是目的港交货吗_刚接手出口业务,搞不懂FOB? CIF? 为你科普→

Export专用名词辨析01 名词辨析#FOBFOB(Free On Board),含义是装运港船上交货,指卖方在合同规定的装运港负责将货物装上买方指定的船上,并负责货物装船之前的一切费用和风险,以及办理出口通关的相关事宜及费用,所以在实…

python字符串的表示形式_python - 如何为类对象创建自定义字符串表示形式?_class_酷徒编程知识库...

当前python 3的更新如下:class MC(type):def __repr__(self):return Wahaha!class C(object, metaclassMC):passprint(C)如果希望跨python 2和python 3运行的代码,则six模块将包含以下内容:from __future__ import print_functionfrom six im…

MyBatis核心接口和类

三大对象: 1、SqlSessionFactoryBuilder:负责构建SqlSessionFactory,并且提供了多个build()方法的重载 2、SqlSessionFactory:创建SqlSession实例的工厂 3、SqlSession:用于执行持久化操作的对象 三大对象获取的步骤&a…

中的数组怎么转成结构体_传说中的“衡水体”应该怎么练?

传说中的“衡水体”应该怎么练?我也不知道,哈哈哈哈哈哈。因为我之前关于衡水体的回答最高赞评论说我这个不是衡水体……随便写的之前的回答所以,这篇文章纯属交流分享,同时枯燥无味,可能适合觉得自己书写不好看的高中…

windows 显示苹果分区_基准测试数据显示苹果M1运行Windows的表现比微软自家硬件好上近一倍...

根据最新的基准测试,苹果M1运行 "Windows 10 on ARM "的速度比微软自家的硬件快了近2倍。更新后的基准数据显示,苹果M1上的Windows 10比Surface Pro X快得多,这还是配备了基于骁龙8cx的处理器的Surface Pro X原生运行该操作系统的环…

centos7默认字体_CentOS7.5字体美化

背景知识有衬线 (Serif) 无衬线 (Sans Serif) 和等宽 (Monospace) 字型1 有衬线 (Serif) 字型是比较正式的字体,比划粗细不一,在笔划的边缘有装饰部分(我的理解是有笔锋)。英文当中比较有名的包括 Times New Roman, Georgia, 而中文当中则是包括大名鼎鼎…

翻译:通向T-SQL的阶梯:超越基础水平3:建立相关子查询

原文链接:http://www.sqlservercentral.com/articles/StairwaySeries/105972/ 原文作者:Gregory Larsen 该系列 本文是楼梯系列的一部分:通向T-SQL的阶梯:超越基础水平 从他的t - sql DML楼梯后,格雷戈里拉森涵盖了更高级的子查询等方面的t - sql语言。…

筛选中很容易粘贴到被隐藏部分_excel复制粘贴:如何将数据粘贴到筛选区域中?...

编按:哈喽,大家好!看到标题相信大家都会纳闷吧。复制粘贴不是excel中最简单,最基础的操作吗?怎么可能90%的人都不会呢?今天咱们要说的可不是普通的复制粘贴,而是将数据复制粘贴到筛选后的区域中…

python 发邮件_Python发邮件告别smtplib,迎接zmail

之前介绍过smtplib发邮件代码,直到今天仍有人在这里遇到问题。而且代码复杂,解释起来很麻烦,今天给大家介绍一个新的发邮件方法——zmailzmail的优势自动填充头信息将一个字典映射为email,构造邮件相当于构造字典自动寻找邮件服务…

重复数据_MongoDB 自动过滤重复数据

摘要:使用 update_one() 方法而不是 insert_one() 插入数据。相信你一定有过这样的经历:大晚上好不容易写好一个爬虫,添加了种种可能出现的异常处理,测试了很多遍都没有问题,点击了 RUN 开始正式运行 ,然后…

多个canvas画布合并_canvas的基础入门

nvas是定义在浏览器上的画布。它不仅仅是一个标签元素更是一个编程工具是一套编程的接口。利用它可以开发出很多东西,比如动画,游戏,动态的图表等富有变现力和感染力的应用。还可以开发出绚丽的3D动态效果。接下来我们一起学习!一…

AngularJS 计时器

<div ng-controller"MyController"><!--显示$scope.clock的now属性--><h1>hello {{clock.now}}</h1><!--显示$scope.clock&#xff0c;里面有一个属性now--><h1>hello {{clock}}</h1> </div><script src"ht…

Rulo扫地机器人app_扫地机器人怎么选?扫地机器人怎么用

扫地机器人又称自动打扫机、智能吸尘、机器人吸尘器等&#xff0c;是智能家用电器的一种&#xff0c;能凭借一定的人工智能&#xff0c;自动在房间内完成地板清理工作。一般采用刷扫和真空方式&#xff0c;将地面杂物先吸纳进入自身的垃圾收纳盒&#xff0c;从而完成地面清理的…

python七巧板三角形_用七巧板拼出14种三角形,这才是图形认知的神器!

原标题&#xff1a;用七巧板拼出14种三角形&#xff0c;这才是图形认知的神器&#xff01;随着幼升小越来越注重孩子的图形认知能力&#xff0c;很多名校幼升小都选择了七巧板作为考验孩子的题目&#xff01;比如北京实验二小09年的幼升小考题中&#xff0c;就有一道“用七巧板…

Docker 容器的常用命令

容器常用的管理命令1. 创建并启动容器 docker rundocker run 创建并启动一个容器&#xff0c;在run后面加上-d参数&#xff0c;则会创建一个守护式容器在后台运行。注&#xff1a; docker run将在下一章节中具体描述2. 查看docker ps -a 查看已经创建的容器3. 停止 docke…