我一直在从官方文档学习 GORM,当尝试使用 Create() 函数从地图创建记录时遇到了一些困惑。
官方文档展示了从地图创建记录的示例:
// Single insert
db.Model(&User{}).Create(map[string]interface{}{
"Name": "jinzhu", "Age": 18,
})
// Batch insert
db.Model(&User{}).Create([]map[string]interface{}{
{"Name": "jinzhu_1", "Age": 18},
{"Name": "jinzhu_2", "Age": 20},
})
但问题是——如果表没有定义主键 (PK),这种方法可以正常工作。但是,如果我定义了一个主键字段(例如user_id
),就会出错。据我所知,每个表都必须有一个主键才能进行规范化,那么为什么这种方法在没有主键的情况下也能正常工作呢?
如果表有主键,从 map 创建记录有什么有效的用例吗?在这种情况下,GORM 会自动处理主键吗?还是我遗漏了什么,导致它真的无法处理主键?
我还想知道文档中的示例是否真的写得很好,或者是否需要对带有主键的表进行修改。处理带有主键的表时,我应该使用结构体而不是映射吗?