热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gozero微服务框架入门及实战之单体服务接mysql

云原生微服务框架go-zero

在初步完成go-zero框架的单体服务后,接下来会介绍更符合实际业务需求的实现。一般来说,数据是需要保存到数据库之中的,如常规的增删改查功能。

go-zero框架支持多种数据库,此处以mysql为例。


环境

操作系统:Windows10

go版本:go1.16.5

go-zero版本: 1.1.18

开发工具:Visual Studio Code 1.58.2

mysql: 5.7.26

redis:3.2.100


流程

按照go-zero框架数据库处理的一般流程,首先要准备好编写sql语句的文件,然后使用命令自动生成增删改查的处理逻辑,相当快捷方便。


编写SQL

此处的脚本和普通的sql格式是完全一样的,可以直接从数据库导出,如下图所示:


生成逻辑

sql文件所在目录执行命令,自动生成处理逻辑相关的文件,如下所示:

goctl model mysql ddl -src todo.sql -dir . -c

关于命令的格式可以查看相关文档,一般替换文件路径和文件名即可。其中,生成的主要是*model.go结尾的文件,包括结构体及增删改查相关函数等,如下所示:


实现API

在生成数据库操作处理文件后,就可以开始编写业务处理逻辑了,下面分别实现写入和查询api。由于默认生成的是带缓存的数据库操作处理函数,所以会用到redis。


加入mysql和redis配置相关实现(config/config.go)及具体配置(etc/todo-api.yaml):


上下文中加入数据库及表相关初始化处理(svc/servicecontext.go),如下所示:


▶写入api逻辑使用生成的数据库接口写入数据,实现相关函数,如下所示:


然后执行命令启动服务:

go run todo.go -f etc/todo-api.yaml


使用postman测试效果如下:


数据库中数据如下(执行两次post后的数据):


查询api逻辑略有不同,需要自行编写查询接口。这是因为查询参数是自定义的,而且是多个参数关联查询。具体实现过程,如下所示:


查询函数实现(model/todomodel.go):



业务逻辑实现(gettodologic.go):


然后执行命令启动服务:

go run todo.go -f etc/todo-api.yaml


使用postman测试效果如下:


经过上面的修改,基本的示例单体服务对接mysql数据的相关操作已经完成,可以满足业务验证的需要后面我们将进一步完善,如增加rpc调用,实现内部服务间的通信。


说明

以上示例代码,我们会更新到githubgitee,可根据需要下载,具体路径如下:

github:https://github.com/iounce/go-zero-demo

gitee:https://gitee.com/iounce_admin/go-zero-demo




推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 线程漫谈——线程基础
    本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。进程与线程理解线程是至关重要的,每个进程至少有一个线程,进程是线程的容器,线程才是真正的执行体,线程必 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Visual C# TabControl中TabPage分离成若干个Form的小办法
    写Visual的同学们都会用到这个TabControl的控件,然后会分好几页的TabPage,每页都有很多控件和业务逻辑,但是每页的关系也 ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
author-avatar
gloriamm_520
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有