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

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

ruisui884个月前 (02-22)技术分析14

背景

上一个小节,我们已经初步完成了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” 的相关文章

出租车费用管理系统——出租车管理软件推荐

出租车费用管理系统是由宏达官方推出的一款出租车管理软件,用户可以在该软件中对出租车进行一个全面的管理,支持车辆信息管理、日常费用结算管理等等,同时该软件中还会对各种费用进行一个总结,帮助各位更加清晰进行查看,非常的便捷,有需要的小伙伴快来喜爱杂岸边埃安。来源:http://www.3h3.com/s...

79.idea中git合并分支操作分享

文章目录前言1.fetch的操作2.合并最新代码到当前的开发分支3.解决冲突4.分支合并:5.完成代码合并总结前言git的操作在日产的工作中也非常重要,团队化的代码管理,每次如果代码被别人覆盖或者自己的代码不能提交到服务器那是灾难性的结果,本篇进行一篇分享来总结下idea中git的操作帮助java开...

软件测试-性能测试专题方法与经验总结

本文 从 性能测试流程,性能测试指标,性能监测工具,性能测试工具,性能测试基线,性能测试策略,性能瓶颈分析方法几个维度,进行知识总结和经验分享;详细见下图总结,欢迎大家补充;性能测试经验与思考1. 性能测试流程1.1. 性格规格评审1.2. 资源排期1.2.1. 人力资源1.2.2. 时间计划· 性...

祸害阿里云宕机3小时的IO HANG究竟是什么?

本文来自微信公号“CSDN”(ID:CSDNnews),作者 | 王知无, 责编| 郭 芮。2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP、网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务器登不上...

Vue进阶(幺叁捌):vue路由传参的几种基本方式

1、动态路由(页面刷新数据不丢失)methods:{ insurance(id) { //直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/particulars/${id}`,...

Vue页面传参详解

一、两种方式方法1:name跳转页面this.$router.push({name:'anotherPage',params:{id:1}})另一页面接收参数方式:this.$route.params.id示例:控制台展示:方法2:path跳转页面this.$router.push(...