go 项目中对模型映射数据库表结构的解决方案是什么?

128 天前
longmeier90  longmeier90
```
由于本人是重度 django 玩儿家,习惯 django 的那种自动 migrations 、migrate ,模型-数据库的那种迁移方式。
现在转 go ,但是找了一下没发现,有什么好用的包可以将,struct 映射数据库(全自动),不需要手动编写 sql ,
支持表结构一步一步修改,删除、重命名等记录。
你们 gohper,在项目 struct->数据库当中都是怎么个管理方案。

```
2937 次点击
所在节点   Go 编程语言  Go 编程语言
42 条回复
loading
loading
128 天前
@liuhan907 #17 生产环境还是自己背锅比较好,因为有时因为 bug ,可能就丢了列甚至表。当然,用工具生成方案是对的,但依然要人工审查一次。
james122333
james122333
128 天前
记得没有 gorm 对类行改动好像很有问题
我是自己根据 struct 的 tag 组成 sql 语法 从建立资料库 建立表栏位 更改表栏位语法都生成并运行
rrfeng
rrfeng
128 天前
仓库里单独建个目录放好用来改变的 sql ,做好版本记录。
iyaozhen
iyaozhen
128 天前
https://gorm.io/gen/
字节内部用的这个,gorm 加强版

可以连上数据库,生成 go 代码
EscYezi
EscYezi
128 天前
个人感觉有个工具能对比测试库和线上库的差异比较重要。表结构个人喜欢以数据库表为核心,映射用工具生成或者手写无所谓,只要字段对的上。按这个思路的话自动迁移其实可以不用
cooltechbs
cooltechbs
128 天前
@lasuar 同多年 Go 经验,完全同意你说的。

另外就是新项目我基本都会给大家安利 MongoDB 和 Cassandra 这些 NoSQL ,直接避开 migration 问题。只要不是需要 transaction 的交易服务那些,NoSQL 绝对更省心(除非团队里都是 SQL 老油条)
lasuar
lasuar
127 天前
@cooltechbs 大部分项目,不管是技术栈熟悉程度还是事务的方面,类 MySQL 数据库都是避不开的。

通过我说的方式来记录表结构,还有一个优势就是我不需要去完全学会那些 orm 库的各种 tag 语法。我个人认为哈,这东西完全对开发人员是一个多余的学习成本,虽然并不复杂,但是你耐不住他语法足够多还在不断更新,完全不利好语言新人。
而且这玩意和语言绑定,我最讨厌和什么东西绑定了,我现在的一个微服务项目没有使用任何框架,就是 go 加上 grpc ,注册发现都是直接用的 k8s 的 service ,做到足够简洁,如果有开发新人,他不需要学习额外太多东西。
nanpu
nanpu
127 天前
gorm xorm ent
lesismal
lesismal
127 天前
如果不用 orm, 可以试试我这个 github.com/lesismal/sqlw
lesismal
lesismal
127 天前
@lasuar Can't agree more!
Lychee0
Lychee0
127 天前
gorm gen
wwhontheway
wwhontheway
127 天前
可以看看 gorm/gen or sqlc?
hzzhzzdogee
hzzhzzdogee
127 天前
gorm gen +1
Kauruus
Kauruus
127 天前
用 migrate 管理,但不自动执行。

用 sqlc 生成 db 模型和查询。根据需要可以手工映射一次,隔离 db 实现。
dododada
dododada
127 天前
兄弟们 sql 上线没有 dba 审核的么?
happy32199
happy32199
127 天前
map[string]any
hubqin
hubqin
127 天前
@fffq 我是基于这个魔改的
gvison
gvison
126 天前
通过 sql 反向生成 go struct 映射数据库代码会更简单,连接数据库后,指定表来生成对应 gorm 的 struct 代码,https://go-sponge.com/ui/web-model
guhuisec
126 天前
我用的是这个,挺好用的,每次需要哪个表就生成一下: https://github.com/xxjwxc/gormt 我的配置文件:

https://gist.github.com/haomiao33/9482a96c0ae8367a8a134ee0e9aab7a0
ninjashixuan
126 天前
怎么那么多人提 gorm gen 印象中这个只是 ddl -> orm model ,但是做不了 sql migrations 变更吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1085373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX