想知道 go 的 orm 框架都是如何映射结构体到表的?

2020-08-20 10:29:22 +08:00
 swqslwl

通过结构体名去映射每个表的话,难道是有一个"注册"结构体的操作?不然的话是怎么找到项目中与表名对应的结构体的?

package model

import (
	"github.com/jinzhu/gorm"
)

type ExaFileUploadAndDownload struct {
	gorm.Model
	Name string `json:"name" gorm:"comment:'文件名'"`
	Url  string `json:"url" gorm:"comment:'文件地址'"`
	Tag  string `json:"tag" gorm:"comment:'文件标签'"`
	Key  string `json:"key" gorm:"comment:'编号'"`
}

}
2294 次点击
所在节点    Go 编程语言
9 条回复
coderxy
2020-08-20 11:01:51 +08:00
gorm:"comment:'文件名'" 就是这个起作用, 用反射获取 tag 的内容。然后一一对应
pwli
2020-08-20 11:23:29 +08:00
可以给结构体写个 TableName()方法返回对应的表名,如果未定义该方法,框架可以使用默认映射策略,如:ExaFileUploadAndDownload -> exa_file_upload_and_download
mcfog
2020-08-20 11:44:49 +08:00
很多玩法,可以注册用反射解决,可以生成代码解决,也可以直接不解决,让用户 new 出来当参数传进来
Leigg
2020-08-20 12:11:00 +08:00
多了解 go 反射
labulaka521
2020-08-20 12:25:16 +08:00
reflect
tikazyq
2020-08-20 17:27:48 +08:00
反射
chengxiao
2020-08-20 17:52:47 +08:00
func (ExaFileUploadAndDownload) TableName() string {
return "表名"
}
wangyzj
2020-08-20 22:40:49 +08:00
我看代码里面写的是反射方式
jessun1990
2020-08-20 22:43:14 +08:00

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

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

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

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

© 2021 V2EX