GORM标记embedded的Address结构体未迁移到SQL表问题咨询
问题原因
- 核心原因是
Address结构体的所有字段均为小写字母开头,属于Go语言的未导出字段:GORM通过反射读取结构体字段的标签和属性,没有权限访问包外不可见的未导出字段,因此迁移时直接忽略了整个Address嵌入结构的所有字段。 - 你声明的
DBModel能正常嵌入,是因为它的所有字段都是大写开头的导出字段,GORM可以正常读取解析。
修复方案
将Address的字段全部改为大写开头的导出字段即可,如果你需要给嵌入的Address字段统一加前缀避免重名,可以补充embeddedPrefix标签:
type Address struct { Address string // 改为大写导出 City string State string Pincode int Country string } type Office struct { DBModel DBModel `gorm:"embedded"` // 可选加embeddedPrefix生成address_address、address_city类的字段名 Address Address `gorm:"embedded;embeddedPrefix:address_"` Name string }
重新执行AutoMigrate就会生成对应的Address相关字段了。
内容的提问来源于stack exchange,提问作者Sagar Agarwal
相关产品推荐
相关产品推荐

