Press "Enter" to skip to content

我写了一个字节跳动内部也在用的开发工具

对不起,有一点标题党了。

前阵子,在字节跳动工作的朋友告诉我,我的一个开源作品“sql2struct”在字节内部被推荐为实用工具了。

字节内部实用工具

有一点小激动,对于一个开发者而言,最大的鼓励莫过于自己的作品被更多人的看到、使用和喜爱。

sql2struct 是什么?

其实也不是什么了不起的项目。

sql2struct 是我五年前刚接触 Go 开发时写的一个小工具,解决了日常开发中的一个小痛点。

做过 Go web 开发的朋友应该知道,Go 是一门编译型语言,在操作数据库的时候,我们一般需要定义一个 Model 来映射数据表的字段。

比如有这么一个用户表:

数据表

我们需要在 Go 文件中定义一个 struct 来做字段映射:

Go Struct

如果要映射的表字段比较多,在 Go 代码中一个一个去写,还是比较费时费力的。

程序员都是懒惰的。我当时的想法是,能不能写个转换工具,导出建表用的 sql 语句,一次性转换成 Go 结构体字段。

于是 sql2sturct 诞生了。最初的版本长这样:

sql2struct 初版

为了使用方便,我把 sql2struct 做成了 chrome 插件的形式,只需要安装一次,每次只要打开插件,粘贴 sql 建表语句,就能复制使用生成的 go struct 代码。

sql2struct 发布以来,没怎么做过推广,具体有多少人在用我不好估计,但我自己的日常开发中,有在频繁使用,也安利给了身边的一些同事。

陆陆续续也收到了一些用户的反馈:

sql2struct issues

毕竟发布时间比较久了,技术栈很老旧,想要重构一版,但一直没有足够的动力,也没有连续的时间去做这件事。

最近卯足了劲儿,花了一个礼拜晚上的时间,使用新的技术栈完全重构了一版。

新版 sql2struct 介绍

跟原来的界面总体相差不大,使用方式也保持一致:

  1. 先在数据库客户端通过 show create table xxx\G; 拿到建表的 sql 语句;

获取 sql 建表语句

  1. 在左边的输入框粘贴建表的 sql 语句,右边输入框自动生成对应的 go struct 代码;

sql 转换成 go struct

  1. 复制生成的 go struct 代码,粘贴到项目 model 中使用。

新版 sql2struct 继承并扩展了原版的自定义转换设置功能。

比如可以勾选哪些 tags 需要在 go struct 生成:

go struct tags

比如为了满足 go 的命名风格,自定义哪些字段在转换成 go struct 时需要全部大写:

go struct 大写字段

比如你也可以自定义 sql 字段类型与 go struct 字段类型的映射关系:

field maps

除此之外,新版还支持了表注释、表名称、字段注释的自动生成。

技术栈

旧版的 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 是一个从痛点出发,用来提高生产力的开发工具。

很开心有部分朋友已经用上了,也希望能有更多的朋友了解这个工具,使用起来,参与共建。