bee generate 是唯一能批量生成可运行代码的命令,常用子命令为 scaffold、model、controller;scaffold 全栈生成 CRUD,需数据库已存在且配置正确;model 从表生成结构,controller 用于逻辑层扩展;生成后须手动补全路由注册与 ORM 初始化。

bee generate 是唯一能真正批量生成可运行代码的命令,其他命令(如 new、api)只建骨架,不写业务逻辑。
哪些 generate 子命令最常用
日常开发中真正能省时间的只有三个子命令:scaffold、model、controller。其中 scaffold 是「全栈生成」——它一次性建 model + controller + router + view(Web 项目)或 API 路由(API 项目),适合快速搭 CRUD;model 和 controller 则用于按需补缺。
-
scaffold要求数据库已存在且连接通畅,否则会卡在 ORM 初始化阶段 -
model可单独从已有表生成,比如加了个新表order_log,直接bee generate model order_log -
controller不依赖数据库,适合纯逻辑层扩展,例如bee generate controller Admin会生成空方法框架
用 scaffold 生成完整 CRUD 的硬性条件
执行 bee generate scaffold user -fields="id:int64,name:string,age:int" -driver=mysql -conn="root:pass@tcp(127.0.0.1:3306)/test" 前必须确认:
- MySQL 服务正在运行,且
test库已手动创建(bee不自动建库) -
conn中的账号有CREATE TABLE权限(scaffold会尝试建表,失败则整个命令退出) - 项目根目录下已有
conf/app.conf,且其中orm相关配置未被注释(如orm = true) - Go 模块已初始化:若项目无
go.mod,先运行go mod init your-app-name,再go mod tidy
生成后必须手动改的两处
scaffold 生成的代码不是开箱即用的,以下两处不改就跑不起来:
- 路由注册:生成的
routers/router.go里默认是beego.Include(&controllers.UserController{}),但 Beego v2 要求显式调用Include前先注册命名空间,得补一行beego.NSRouter("/user", &controllers.UserController{}, "*:Get,Post,Put,Delete") - ORM 初始化:
main.go中需确保orm.RegisterDataBase在beego.Run()前执行,且数据库别名(如"default")要和app.conf中orm.default一致
appcode 和 generate 的本质区别
bee generate appcode 是反向操作:它读取已有数据库表结构,生成 model + controller + router,但不生成视图或 API 文档;而 scaffold 是正向驱动,基于字段定义推导出整套结构。实际项目中更常混用:appcode 用于老系统迁移,scaffold 用于新模块开发。注意 appcode 会直接修改 routers/router.go,但它的插入位置可能错乱,建议生成后手动检查路由是否被包在 NSNamespace 里。


















