当前位置:首页 > 技术分析 > 正文内容

golang web开发——gin完整整合swagger和mysql

ruisui882个月前 (02-22)技术分析8

背景

上一个小节,我们已经初步完成了gin整合swagger,发现gin中使用swagger也是很香的,这个可以方便我们少些很多接口说明文档,应该上一个小节说过,我们开始的是实战系列的教程,所以本小节废话不多,将完整的写完一个实战项目的代码



因为我们做的是电影管理系统,所以这个小节,我们将围绕对电影进行增删改查的一些操作开始做起,电影的数据,我们将会从豆瓣中获取,所以我们先定义一个相对比较齐全的电影类型的数据类型,本小节完成的基本功能是

  1. 保存电影数据
  2. 批量保存电影数据
  3. 根据电影id删除电影数据
  4. 根据电影id查询用户数据

虽然看起来比较简单,但是我第一次敲这个代码的时候,还是很牛逼的,就是感觉golang操作数据库,如果用原生的sql库,操作起来还是比较麻烦的,主要是异常比较多,我们要时时刻刻处理异常的问题,这个非常麻烦,也许是我写的不对,完全是按照写java的思想写的,如果写的不对的地方,还是希望大佬批评指正

废话不多说,我们还是从上个小节的代码基础上,我们开始继续慢慢整合吧,老规矩,先把最后整合的完整骨架图列一下


Step1.编写我们的controller层——增加路由

与写java代码比较像的是,我们还是优先编写controller层,如下图所示,我们一共定义了四个路由,看起来还是比较简单易懂的,不多做解释

接下来,我们就要分别编写我们的service层的逻辑编写了,因为到目前为止,逻辑还是比较简单的,所以我们就先把底层操作数据库的代码优先编写了


Step2.定义mysql数据库模型

因为我们保存的是一个电影模型,所以我们还是优先把电影数据结构定义一下,golang定义的数据结构如下图所示,因为我们要gin来做参数绑定的,前后端数据交互是post请求,请求类型是json,因为有数据绑定,所以我们要定义匹配的json字段名,最后结果如下

Mysql的表定义如下

Step3.golang连接数据库,基本逻辑保存逻辑书写

3.1 golang连接数据库,这个在之前的文章介绍过,本文不过多的介绍,与上几个小节的配置基本一样,如下图所示

3.2 修改movie.go,对象模型新增操作数据的原生方法

3.2.1 保存电影信息

3.2.2 根据id查询电影信息

3.2.3 删除电影信息

3.2.4 批量保存电影信息

因为之前有一个小节,专门介绍过golang操作mysql的知识,这边操作基本相同,所以这边我们就不会再过多介绍,不过这边我发现写的时候,并不是非常方便,毕竟如果使用原生的sql,不用orm框架还是比较累的,我们有空再一起学习一下golang的orm框架gorm,然后再修改一下这边的逻辑

Step4.完成service层的编写


刚刚说过,因为这个实战项目刚刚起步service层还是比较简单的,并没有非常复杂的逻辑需要处理,所以目前,我们要做的就是解析客户端带过来的参数,然后进行数据绑定,最后调用我们上一个小节定义的dao层逻辑,这样我们就大功告成了

4.1 保存单个电影数据,在这边我们有一个知识点需要记忆一下,就是调用gin的context.ShouldBindJSON进行数据绑定,这边我们以后会经常用到,所以需要进行一下简单的临时记忆,还有我们也要记忆一下sawgger的注释的标签含义,我们只要有一个大概的印象就可以了,如果有时候忘记了,可以简单的网上搜索一下就可以了

4.2 根据id获取电影信息

4.3 删除逻辑在service层非常相似,都是获取到id,只是一个是调用查询,一个是调用删除,还是比较相似的

4.4 批量保存的逻辑还是相对复杂一点,因为我们是保存的集合对象,所以我们要定义一个movie几个模型

在此基础上,然后我们就可以进行与单个保存的无差别代码了

好了,到此为止,所有的代码就差不多结束了,接下来把几个辅助类的代码也简单地贴一下

1.常量类

2.返回对象,(interace{}表示任意对象,你可以理解成java中的Object对象)


测试

接下来,我们就要开始测试我们写的代码了,不过跟上一章说的比较像的是,我们需要先swag init一下,这样才能生成最新的swagger定义了,运行完swag init之后,启动项目,访问如下网址

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

保存数据,如下图所示,不过另我意外的是,后台接收到的请求method居然是options,我不知道我哪里写错了

后来我看了良久才知道是main函数的swagger注释写错了,如果是本地,一定要写localhost,不能写127.0.0.1

数据库数据也正确插入

根据电影id查询电影基本信息

删除电影信息

批量保存用户信息


小结

本小节的篇幅有点长,希望大家耐心看完,如果有时间,可以手敲一遍,这样大家印象也会比较深刻,总比你一开始就看golang的内存模型,channel等等高深的内容来的舒服,我们还是一步一个脚印的去学,下一个小节,我们将在云端使用docker来部署我们这个实战项目


如果大家看到这里,希望大家点一个关注,觉得写得不错,希望给一个点赞,真心话,你的点赞和关注是对我最大的认可,也是我写作的最大动力


还有一个好消息分享一下,头条终于通过了原创认证了,这一个月的文章没有白费心血~接下来,我还会好好努力的~,正确给大家带来更多优质的golang和java教学

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2162.html

标签: go swagger
分享给朋友:

“golang web开发——gin完整整合swagger和mysql” 的相关文章

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

用IDEA开发如何用Git快速拉取指定分支代码?

1,准备空的文件夹,git init2,关联远程仓库,git remote add origin gitlab地址3,拉取远程分支代码,git pull origin 远程分支名再用IDEA打开项目即可...

理解virt、res、shr之间的关系(linux系统篇)

前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过top命令查看进程占用了多少内存。这里我们可以看到VIRT、RES和SHR三个重要的指标,他们分别代表什么意思呢?这是本文需要跟大家一起探讨的问题。...

BuildKit 镜像构建工具

#暑期创作大赛#快速开始 对于 Kubernetes 部署,请参阅examples/kubernetes。BuildKit 由buildkitd守护进程和buildctl客户端组成。虽然buildctl客户端可用于 Linux、macOS 和 Windows,但buildkitd守护程序目前仅适用于...

虚幻引擎5.5发布

IT之家 11 月 13 日消息,虚幻引擎 5.5 现已发布。据介绍,新版本虚幻引擎在动画创作、虚拟制作和移动游戏开发方面取得进步;渲染、摄像机内视觉特效和开发人员迭代等领域的部分功能已可用于生产。IT之家整理部分功能亮点如下:动画Sequencer增强虚幻引擎的非线性动画编辑器 Sequencer...

别让“跑焦”毁所有!仅需这一项设置,即可显著改善镜头对焦精度

我常常会收到一些摄影爱好者的私信,也一直在努力的帮助大家解决更多摄影中常见问题。在我收到的所有问题中。有一个问题是最麻烦的,那就是“为什么我的图像看起来模糊?”。这个问题几乎每个人都遇到过,究其原因可以说是多种多样相对复杂。起初我一直认为是对焦问题所导致,也就有了我之前所写的“后按对焦”以及“对焦模...