You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何GORM执行CreateTable时忽略了结构体字段?

问题原因与解决方案

嗨,这问题我熟!GORM之所以忽略了Config结构体,核心原因是你的Config结构体里的字段都是小写开头的。

在Go语言中,小写开头的字段属于包私有字段,外部包(比如GORM)无法通过反射机制访问到这些字段。GORM在处理结构体时,会扫描所有公开(大写开头)的字段来生成数据库列;如果一个结构体里没有任何可被访问的公开字段,GORM就会认为这个结构体没有需要持久化的内容,自然不会在数据库表中创建对应的列啦。

修复方案

只需要把Config结构体里的字段改成大写开头(公开字段)就行,要是你希望序列化后的JSON字段保持小写,可以加上json标签:

type Config struct {
    Attr1 int    `json:"attr1"`
    Attr2 string `json:"attr2"`
}

修改完代码后,重新运行你的程序,再查看test.db的表结构,就能看到bs表已经多出了config字段:

sqlite> .schema
CREATE TABLE "as" ("id" integer primary key autoincrement );
CREATE TABLE "bs" ("id" integer primary key autoincrement,"a_id" integer,"config" text );

这样GORM就能正确识别Config结构体,并把它序列化成JSON字符串存储到config这个text类型的列里啦。

内容的提问来源于stack exchange,提问作者h10g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:21:05