能,bee api 命令可快速生成纯 API 项目,跳过 views/static,自动生成 RESTful 路由、CRUD 控制器及模型,并支持数据库反向工程、Swagger 文档和定制 JSON 输出。

能,而且比手写路由+控制器快得多——关键在 bee api 命令,不是 bee new。
用 bee api 生成纯 API 项目(不带 view / static)
Beego 的 bee new 默认创建的是带前端模板的 Web 项目,而 REST 接口服务应该用 bee api。它会跳过 views/、static/ 目录,只保留 controllers/、models/、routers/ 等必要结构。
- 执行
bee api myapi后,controllers/下默认生成object.go和user.go,含完整的 CRUD 方法(GetAll、GetOne、Post、Put、Delete) - 这些控制器已自动注册 RESTful 路由:比如
GET /v1/object对应ObjectController.GetAll - 注意:生成的路由前缀默认是
/v1,由routers/router.go中的ns := beego.NewNamespace("/v1", ...)控制,可直接删掉或改写
从数据库表一键生成 Model + Controller + Router
如果你已有 MySQL 表(如 app 表),不用手写 models.App 或重复实现增删改查逻辑。Beego 的 bee 工具支持反向工程:
- 确保已安装 MySQL 驱动:
go get github.com/go-sql-driver/mysql - 运行命令:
bee api myapi -conn="root:pass@tcp(127.0.0.1:3306)/mydb" -driver=mysql -tables="app" - 生成的
models/app.go会包含字段映射和TableName()方法;controllers/app.go自动实现标准 REST 方法;routers/router.go插入对应路由 - ⚠️ 常见坑:
-conn字符串里不能有空格,charset=utf8mb4建议显式加上,否则中文可能乱码
启动时自动加载 Swagger 文档
Beego 内置文档生成能力,但需主动触发 —— 不是跑 bee run 就自动出文档。
- 首次生成文档:在项目根目录执行
bee generate docs,它会扫描controllers/中的注释(如// @Title GetApp)生成docs/doc.go - 启动带文档服务:
bee run -downdoc=true -gendoc=true,此时访问http://127.0.0.1:8080/swagger/即可交互测试接口 - ⚠️ 注意:
-downdoc=true会自动下载swagger-ui到static/swagger/,若网络不通会卡住;可提前手动下载放好,或改用bee run -gendoc=true+ 外部 Swagger UI - 生成的文档依赖控制器方法上的注释块,漏写
// @router /app [get]就不会出现在文档里
修改默认 JSON 输出行为(避免 null 字段和多余换行)
Beego 默认用 c.ServeJSON() 返回 JSON,但它会序列化所有字段(包括 nil 指针)、加换行缩进,不适合 API 场景。
- 在控制器中改用:
c.Data["json"] = map[string]interface{}{"code": 0, "data": obj}+c.ServeJSON(true)(第二个参数true表示不格式化) - 更彻底的方式:全局禁用 indent,在
main.go的web.BConfig.CopyRequestBody = true下加一行:web.BConfig.JSONIndent = "" - 对空值敏感?在 struct tag 里加
json:",omitempty",例如:Name string `json:"name,omitempty"` - ⚠️
ServeJSON(false)并不会压缩空格,必须设JSONIndent = ""才生效
真正省时间的点不在“会不会写”,而在“要不要自己写”——bee api 生成的代码足够跑通生产级 CRUD,但别忘了检查生成的 Model 字段类型是否匹配实际数据库(比如 tinyint(1) 可能被映射成 int 而非 bool),这是最容易被忽略的隐性错误源。


















