对不起,有一点标题党了。
前阵子,在字节跳动工作的朋友告诉我,我的一个开源作品“sql2struct”在字节内部被推荐为实用工具了。
有一点小激动,对于一个开发者而言,最大的鼓励莫过于自己的作品被更多人的看到、使用和喜爱。
sql2struct 是什么?
其实也不是什么了不起的项目。
sql2struct 是我五年前刚接触 Go 开发时写的一个小工具,解决了日常开发中的一个小痛点。
做过 Go web 开发的朋友应该知道,Go 是一门编译型语言,在操作数据库的时候,我们一般需要定义一个 Model 来映射数据表的字段。
比如有这么一个用户表:
我们需要在 Go 文件中定义一个 struct 来做字段映射:
如果要映射的表字段比较多,在 Go 代码中一个一个去写,还是比较费时费力的。
程序员都是懒惰的。我当时的想法是,能不能写个转换工具,导出建表用的 sql 语句,一次性转换成 Go 结构体字段。
于是 sql2sturct 诞生了。最初的版本长这样:
为了使用方便,我把 sql2struct 做成了 chrome 插件的形式,只需要安装一次,每次只要打开插件,粘贴 sql 建表语句,就能复制使用生成的 go struct 代码。
sql2struct 发布以来,没怎么做过推广,具体有多少人在用我不好估计,但我自己的日常开发中,有在频繁使用,也安利给了身边的一些同事。
陆陆续续也收到了一些用户的反馈:
毕竟发布时间比较久了,技术栈很老旧,想要重构一版,但一直没有足够的动力,也没有连续的时间去做这件事。
最近卯足了劲儿,花了一个礼拜晚上的时间,使用新的技术栈完全重构了一版。
新版 sql2struct 介绍
跟原来的界面总体相差不大,使用方式也保持一致:
- 先在数据库客户端通过
show create table xxx\G;
拿到建表的 sql 语句;
- 在左边的输入框粘贴建表的 sql 语句,右边输入框自动生成对应的 go struct 代码;
- 复制生成的 go struct 代码,粘贴到项目 model 中使用。
新版 sql2struct 继承并扩展了原版的自定义转换设置功能。
比如可以勾选哪些 tags 需要在 go struct 生成:
比如为了满足 go 的命名风格,自定义哪些字段在转换成 go struct 时需要全部大写:
比如你也可以自定义 sql 字段类型与 go struct 字段类型的映射关系:
除此之外,新版还支持了表注释、表名称、字段注释的自动生成。
技术栈
旧版的 sql2struct 以 chrome 插件的形式创建,主要技术栈是 html + css + js,界面构建使用了 vue + element-ui。
新版本 sql2struct 使用 typescript + react + vite + pnpm 开发。界面上用到了 codemirror-react 编辑器和 semi-design 组件库。
github 仓库地址是:https://github.com/idoubi/sql2struct
在线使用可以访问:https://dou.tools/sql2struct/
也可以通过源码进行本地部署:
# 下载源码
git clone https://github.com/idoubi/sql2struct.git
# 安装
cd sql2struct
pnpm install
# 预览与调试
pnpm run dev
# 构建发布
pnpm run build
后记
sql2struct 是一个从痛点出发,用来提高生产力的开发工具。
很开心有部分朋友已经用上了,也希望能有更多的朋友了解这个工具,使用起来,参与共建。