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

Golang beego框架模型如何避免自动生成默认主键id?

beego ORM 禁用默认id主键、自定义主键解决方案

beego ORM 默认约定未显式声明主键的模型会自动新增id字段作为自增主键,按以下步骤配置即可覆盖该默认行为:

1. 修正模型定义,显式指定主键

需要满足两个要求:

  • 所有映射数据库的字段必须首字母大写(Go语言仅导出字段允许反射访问,私有字段ORM无法读取)
  • 给实际主键字段加orm标签,用pk标记为主键,column指定对应数据库字段名,非自增主键额外加auto:false
    修正后的代码示例:
type Person struct {
    PersonId string `json:"person_id" orm:"pk;column(person_id);auto:false"`
    Name     string `json:"name" orm:"column(name)"`
    Email    string `json:"email" orm:"column(email)"`
}

2. 调整自动同步配置

如果你开启了ORM自动同步表结构功能orm.RunSyncdb(),修正模型后重新运行项目,框架就不会再自动生成id字段,也不会抛出缺少主键的报错。
如果你完全不需要框架修改现有数据库的表结构,直接注释掉orm.RunSyncdb()相关调用即可从根源避免框架改动表。

可选:显式指定绑定表名

beego ORM默认会将结构体名转为蛇形复数作为映射表名(比如Person默认映射people表),如果需要绑定person表,可以给模型新增TableName方法:

func (p *Person) TableName() string {
    return "person"
}

内容的提问来源于stack exchange,提问作者Md. Sakhawath Hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:02