在初步完成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调用,实现内部服务间的通信。
说明:
以上示例代码,我们会更新到github和gitee,可根据需要下载,具体路径如下:
github:https://github.com/iounce/go-zero-demo
gitee:https://gitee.com/iounce_admin/go-zero-demo