前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CRUD工程师的福音

CRUD工程师的福音

作者头像
李鹤
发布2023-03-06 11:16:40
3670
发布2023-03-06 11:16:40
举报
文章被收录于专栏:k-cloud-labs

CRUD还能这么玩?

作为一名有多年经验的CRUD工程师,在做某项目时,需要在搭建完apiserver框架以及dao部分,三下五除二的就把apiserver部分搞定了,然后到了dao部分。用屁股想了想网上肯定有现成的工具可以自动生成go struct,于是在网上找了找,果不其然,很多,但基本都是根据table来自动生成go struct的,于是搞定了创建table的sql,创建完table之后顺利的用工具生成了go struct。你以为这就完了吗。当然没有,因为在此过程中我发现了一个BUG级的项目:https://github.com/smallnest/gen,点开作者主页一看,原来又是一位自己关注已久的博主:鸟窝,肃然起敬。

项目介绍

这个项目能干什么呢?简单来说就是他可以根据你的数据库自动生成go struct及dao层、api层,直接生成一套可运行的restful api项目,而且还搭配了swagger文档。抛开最终生成的代码不说,单就这个思想就已经够我们学习了。

接下来简单介绍下这个项目,为啥简单介绍呢,因为使用起来确实很简单,而且其文档说明比较完善。

安装

项目采用golang编写,生成的也是golang代码,安装方式自然也是golang项目的安装方式

go get -u github.com/smallnest/gen

使用

在项目代码的example文件夹下存在一个sample.db文件,可以直接根据这个文件来生成完成的项目,当然也支持自定义配置来生成自己需要的部分。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

## 根据sample.db生成项目代码 $ gen --sqltype=sqlite3 \ --connstr "./sample.db" \ --database main \ --json \ --gorm \ --guregu \ --rest \ --out ./example \ --module example.com/rest/example \ --mod \ --server \ --makefile \ --json-fmt=snake \ --generate-dao \ --generate-proj \ --overwrite ## 编译 (使用make命令进行编译,packr2会被自动安装) $ cd ./example $ make example ## 二级制位置./bin/example $ cp ../../sample.db . $ ./example ## 打开浏览器访问这里 http://127.0.0.1:8080/swagger/index.html ## 同样可以使用命令行工具进行访问 curl http://localhost:8080/artists

可能会报错,提示找不到某些文件或者包,安装即可,部分文件判断方式是直接检查GOPATH下是否存在,所以会出现使用go mod模式时get下来之后仍然报错的情况,可以直接到GOPATH下下载对应的项目即可。

是不是so easy,只需要提供数据库即可生成完整项目,但是他的功能不止于此。因为每个人有自己的习惯的编码风格,自动生成的代码不可能满足所有人的需求,那怎么办呢?

高级功能

gen支持自定义模板,可以把原模板导出,基于其修改,或者干脆按照自己的风格制作一套模板,通过--templateDir=参数指定自己的模板的路径即可

如果只想进行简单改动,可以尝试--exec=参数,允许开发者自定义代码生成规则,在项目自带的custom文件夹下有sample.gen文件,可以直接指定--exec=sample.gen看执行效果,如果使用的是最新的master,则执行会报错,看代码可以发现在2020/8/4的一次修改,改变了某些方法的形参,而sample.gen没有进行对应修改,按需修改即可。

原理

项目用到的主要的技术就是golang的template功能,包括template的常用能力及定制函数等功能。另外包括GIN框架、GORM框架等crud工程师们常用的包。里面还有一个平时不怎么用的包packr,其主要功能就是把静态文件嵌入到最终生成的二进制文件中,程序就可以在任何位置直接运行而不需要受制于额外静态文件的位置等因素。

结束语

被CRUD折磨的人啊,是否有考虑过将其自动化呢,虽然业务逻辑是在变化的,但项目框架部分是基本保持不变的,搞一套自己习惯的开箱即用框架岂不是更美,毕竟从头写的话也需要一点时间,懒果然是人类进步的阶梯,赶紧去下载项目试一试吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CRUD还能这么玩?
  • 项目介绍
    • 安装
      • 使用
        • 高级功能
        • 原理
        • 结束语
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档