vlambda博客
学习文章列表

根据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就是用该代码生成的,是不是方便了很多。

总结

程序员理应是懒人,需要用技术来提高效率,做到虽然懒但是也能开心生活。

资料

  1. https://blog.csdn.net/QrrrQ/article/details/73196378

  2. https://studygolang.com/articles/16393?fr=sidebar

最后

我的个人博客为:https://shidawuhen.github.io/

往期文章回顾:

设计模式

语言

架构

存储

网络

读书笔记

思考