写后台业务的同学经常调侃自己的工作就是围绕数据表CRUD. 虽然实际工作并不会如此简单,但是日常中的确有很多类似的重复、缺乏创造性的工作。而这种工作上是可以在一定程度上自动化的。为了提供业务研发人员开发效率,前段时间我们开发了一个后端开发工作流工具,主要提供以下功能:
生成服务器API基础代码以及Swagger文档注释 (只支持gin框架)
生成服务器API客户端代码
go struct 批量添加 tag
生成 gorm model struct
model struct 生成 sql
因为这些功能跟我们内部的公共库有一定耦合,因此整个工具可能无法开源出来。这里,我们以 model struct 生成 sql 功能为例,聊聊我们在做这个工具的思路和使用到的工具。
任务
这里以我们在项目中使用的jinzhu同学的 gorm 作为orm库。如果你在使用golang的其他orm lib,实现方式应该大同小异。
我们的任务是从下面的这个model struct定义:
生成 mysql 建表语句(文件):
思路
从 model struct 生成 sql 是一个 将语言A翻译为语言B 的问题。而这个过程跟我们平时将源代码编译为二进制可执行程