bee generate 可快速生成 Model、Controller、Router 和数据库表,但需严格遵循字段类型(仅小写如 string、int64)、连接字符串配置(含 charset=utf8mb4)、主键显式声明(id:int64)、手动注册数据库(orm.RegisterDataBase)及路由挂载(beego.Include),否则将导致编译失败、404 或数据库未注册错误。

直接用 bee generate 就能生成 Model、Controller、Router 甚至数据库表,但必须注意连接字符串、字段定义和初始化顺序,否则生成的代码跑不起来或路由 404。
生成 scaffold 时字段类型写错会编译失败
比如把 name:string 写成 name:String 或 name:STRING,bee generate scaffold 不报错,但生成的 Model 里字段类型变成未定义的 String,Go 编译直接失败。
- 只支持小写基础类型:如
int64、string、bool、time.Time(需额外 import) -
-fields中字段名与类型之间用英文冒号,多个字段用英文逗号分隔,不能有空格 - 主键字段建议显式写
id:int64,否则 ORM 可能无法识别自增行为 - 如果字段含下划线(如
created_at),生成的 Go 字段名是CreatedAt,但数据库列名仍为created_at,无需额外 tag
生成后必须手动补全 orm.RegisterDataBase 和 Include
生成的代码不会自动注册数据库驱动,也不会自动挂载 Controller 到路由 —— 这是最常被忽略的两步,导致访问 404 或 no database alias named default 错误。
- 在
main.go的main()函数开头加:_ = orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/beego01?charset=utf8mb4") - 在
routers/router.go的init()里,把默认的beego.Router("/", &controllers.MainController{})注释掉,换成:beego.Include(&controllers.UserController{}) - 若用
appcode命令从已有表生成,它会尝试改router.go,但经常漏掉Include调用,务必手检
使用 appcode 从现有表生成时要注意字符集和外键
bee generate appcode 是反向工程,但它对 MySQL 的 utf8mb4 和外键约束支持较弱,容易生成错误的 struct tag 或缺失关联字段。
- 连接串中强烈建议加上
?charset=utf8mb4,否则中文字段可能乱码或建表失败 - 如果表有外键(如
cid int关联category.id),appcode默认不会生成Category *Category关联字段,需要手动补orm:"rel(fk)" -
-tables="news"中表名必须和数据库里**完全一致**(大小写敏感,尤其在 Linux 环境) - 生成后立即运行
bee run,观察控制台是否打印[ORM] register model `News` success,没这句说明 Model 加载失败
真正麻烦的不是生成动作本身,而是生成后那几行必须手写的初始化代码和数据库配置 —— 它们不出现在任何生成文件里,但缺一不可。很多人卡在 404 或 panic,翻日志发现全是 “controller not found” 或 “no registered database”,其实就差这两行。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











