golang mysql 自动建表_Golang自动生成对应MySQL数据库表的struct定义-可视化-Go语言中文社区...

本文介绍了如何使用Golang结合MySQL数据库,通过读取information_schema.COLUMNS表来自动生成GORM的struct定义,从而简化开发中数据库表与struct映射的重复工作。文中还提到了一个名为fuckdb的开源项目,提供了一个可视化的Web界面,方便开发者输入数据库信息,一键生成ORM结构体。该项目目前支持golang struct的多种tag选项,并计划增加更多功能。
摘要由CSDN通过智能技术生成

在golang的开发过程中,当我们使用orm的时候,常常需要将数据库表对应到golang的一个struct,这些struct会携带orm对应的tag,就像下面的struct定义一样:

type InsInfo struct {

Connections string `gorm:"column:connections"`

CPU int `gorm:"column:cpu"`

CreateTime time.Time `gorm:"column:create_time"`

Env int `gorm:"column:env"`

ID int64 `gorm:"column:id;primary_key"`

IP string `gorm:"column:ip"`

Organization string `gorm:"column:organization"`

Pass string `gorm:"column:pass"`

Port string `gorm:"column:port"`

RegionId string `gorm:"column:regionid"`

ServerIP string `gorm:"column:server_ip"`

Status int `gorm:"column:status"`

Type string `gorm:"column:type"`

UUID string `gorm:"column:uuid"`

}

这是gorm对应的数据库表的struct映射,即使数据表的字段不多,如果是手动写起来也是一些重复性的工作。像MySQL这种关系型数据库,我们一般会用orm去操作数据库,于是就想,mysql的数据表能不能来自动生成golang 的struct定义。我们知道mysql有个自带的数据库information_schema,有一张表COLUMNS,它的字段包含数据库名、表名、字段名、字段类型等,我们可以利用这个表的数据,把对应的表的字段信息读取出来,然后再根据golang的语法规则,生成对应的struct。

调研了一下目前有一些命令行工具像 db2struct等,感觉用起来比较繁琐,在想能不能提供一个开箱即用的环境,提供web界面,我们只需要填写数据库信息,就可以一键生成对应的ORM的struct,于是就诞生了这个项目:https://github.com/hantmac/fuckdb

如果你的数据库在本地,那么只需要执行 docker-compose up -d,访问localhost:8088,你就会得到下面的界面:

ee6b6c8894fa91db4d0f237860de478e.png

如果你的数据库在内网服务器上,你需要先修改后端接口的ip:port,然后重新build Docker镜像,push到自己的镜像仓库,然后修改docker-compose.yaml,再执行docker-compose up -d。修改的位置是:fuckdb/frontend/src/config/index.js.

eab4061f0ad3c0b97a03264e35506a45.png

只需要填入数据库相关信息,以及你想得到的golang代码的package name、struct name,然后点击生成,就可以得到gorm对应的结构体映射:

6ba88de516edec251a806ded10d8598e.png

你只需要拷贝你的代码到项目中即可。我们都知道golang的struct的tag有很多功能,这里也提供了很多tag的可选项,比如json,xml等,后面会曾加更多的tag可选项支持。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l7fMOhbn-1578108747773)(https://user-gold-cdn.xitu.io/2020/1/1/16f61a6932355b68?w=600&h=391&f=gif&s=12260461)]

上面的GIF展示了增加了缓存功能的版本,记忆你之前填写过的数据库信息,省去了大量重复的操作,你不用再填写繁琐的数据库名,表名,等等,只需一键,就可以得到对应的代码,是不是很方便啊。ps:目前数据库信息没有做加密,所以不方便放到公网上使用,仅限于内网,后面会进行相应的开发支持。目前这个工具在我们组内已经开始使用,反馈比较好,节省了很多重复的工作,尤其是在开发的时候用到同一个库的多张表,很快就可以完成数据库表->strcut的映射。

RoadMap:

[x] xorm tag support

[x] golang struct to sql create

欢迎试用&反馈&Contribute。代码地址:https://github.com/hantmac/fuckdb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值