根据mysql表结构自动生成go struct
当我们用Go做数据库相关操作时,编写出和表对应的结构体是必做的事情,例如
type ServiceRecommend struct {
Id int64 `gorm:"id" json:"id"` // id
ShopId int64 `gorm:"shop_id" json:"shop_id"` // shopID
MarketServiceId int64 `gorm:"market_service_id" json:"market_service_id"` // 服务市场服务id
Status int64 `gorm:"status" json:"status"` // 推荐状态 1推荐 2取消推荐
CreateBy string `gorm:"create_by" json:"create_by"` // 创建人
CreateTime string `gorm:"create_time" json:"create_time"` // 创建时间
UpdateBy string `gorm:"update_by" json:"update_by"` // 更新人
UpdateTime string `gorm:"update_time" json:"update_time"` // 更新时间
}
这里简单介绍一下gorm和json字段。其中用gorm设置key的特性,如主键、长度等。json用来设置在struct作为json输出的时候,key的名称,如果不设置,默认与导出字段一致。
编写struct没什么技术含量,完全是重复工作。基于重复事情做三次,就要自动化的原则,从github上找到了解决方案。
其实对于解决这个问题的代码挺多,这里提供相对方便且功能强大的,代码库github.com/gohouse/converter,使用方法:
package main
import (
"fmt"
"github.com/gohouse/converter"
)
func main() {
err := converter.NewTable2Struct().
SavePath("./model.go").
Dsn("用户名:密码@tcp(IP:端口号)/数据库名?charset=utf8").
TagKey("gorm").
EnableJsonTag(true).
Table("表名").
Run()
fmt.Println(err)
}
SavePath为输出结果存放文件
DSN用于配置数据库的信息
TagKey用于配置Tag,此处写为gorm
EnableJsonTag用于确认是否输出时有json标签
Table用于指定表,如果不写则输出库中的所有表
文章开始处的struct就是用该代码生成的,是不是方便了很多。
总结
程序员理应是懒人,需要用技术来提高效率,做到虽然懒但是也能开心生活。
资料
https://blog.csdn.net/QrrrQ/article/details/73196378
https://studygolang.com/articles/16393?fr=sidebar
最后
我的个人博客为:https://shidawuhen.github.io/
往期文章回顾:
设计模式
语言
架构
存储
网络
读书笔记
思考