只需要输入要发布的服务名称,crud对应的数据库表名就可以生成代码。由于需要获取表信息,还需要数据库连接信息。

先编写代码,你希望生成的东西是什么样。剩下的就是模版、需要填充到模版里面的数据、一些代码封装。尽量减少外部包的引用。结构上尽量贴近当前业务项目,毕竟希望复制生成的代码,做一些少量修改,快速完成业务。不同语言、不同架构,应该都有对应的crud生成方式。

生成的代码目录:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
crud
server
|   service
|   |    user_service.go
|   model
|   |   user.go
|   dao
|   |  dao.go
|   |  user_dao.go
|   api
|   |  user.pb.go
|   |  user.proto
client
|   schemas
|   |    user_schema_impl.go

整体结构本身也需要自动生成,根据不同需求,每次生成前也需要清理。上面的user是数据库表名,根据表名获取到表信息,生成model。

其他的文件生成过程中需要model的一些字段,比如crud中的update,并不知道具体业务中需要更新哪些字段,这时候需要ast获取model中的字段。不同文件生成的需求会不同,golang函数支持参数传入func,相同的返回值类型,正好合适。golang支持对单个生成的go文件格式化。

模版:

1
2
3
4
5
6
7
templates
dao.go.tpl
table_name.go.tpl
table_name.proto.tpl
table_name_dao.go.tpl
table_name_schema_impl.go.tpl
table_name_service.go.tpl

模版中的代码,也可以在go文件中,分出来结构上会整洁些。

其他的可见代码:

https://github.com/olivercm/crudkit.git