buffalo g resource 是唯一能生成可用 CRUD 骨架的命令,必须带字段定义(如 name:string)、严格语法、显式外键,生成后需立即检查 models/user.go、migrations/xxx.up.fizz 和 actions/users.go 三处,改字段须先 destroy 再重试,且中间件不会自动移除。

buffalo g resource 是唯一能生成可用 CRUD 骨架的命令,其他方式手写文件、拼错方法名或漏字段都会导致 404、panic 或模板找不到。
buffalo g resource 命令必须带字段定义才能生成有效模型和迁移
不写字段,比如只运行 buffalo g resource users,会生成空 struct 和空迁移文件——buffalo db migrate 能成功,但表里没字段,后续 tx.Create() 会因无列而静默失败或报错。
- 字段语法严格:必须是
name:type格式,冒号后不能有空格(email:string✅,email: string❌) - 类型仅支持 Pop 原生识别的:如
string、int、bool、time;不支持uuid、enum、json等缩写 - 外键需显式声明:
author_id:int,不能依赖命名约定自动推导 - 复合类型(如地址 JSON 字段)得等生成完手动改
migrations/*.up.fizz文件
生成后必须立刻检查三处,否则运行时才暴露问题
CLI 不校验生成结果是否合法,很多错误要等 buffalo dev 启动或请求进来才触发。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
-
models/user.go:确认每个字段都有db:"name"tag,Pop 默认不映射字段名到列名,漏了就查不到数据 -
migrations/*_create_users.up.fizz:打开看内容是否真含你写的字段;Fizz 语法写错(如多括号、少逗号)会导致buffalo db migrate静默跳过该文件 -
actions/users.go:所有 handler 默认调用c.Render(),若你要做 API,必须全部替换成c.JSON(),否则模板中间件会拦截并 panic
buffalo g resource 不覆盖已有文件,改字段要先 destroy 再重试
执行 buffalo g resource users name:string 后想加 email:string,直接再跑一遍不会更新已存在的迁移或模型——CLI 认为“资源已存在”,只跳过。
立即学习“go语言免费学习笔记(深入)”;
- 正确做法:
buffalo destroy resource users,再重新运行完整命令:buffalo g resource users name:string email:string - 别手动改
models/user.go或迁移文件:Pop 的字段映射、迁移顺序、事务行为都强依赖 CLI 生成结构 - 如果只是加字段(非重构),也可用
buffalo g model users new_field:int单独生成新迁移,再编辑.up.fizz补全定义
最容易被忽略的是:生成器不会帮你删掉 assets/、关掉 session.Middleware 或移除 CSRF;哪怕你只想要一个纯 JSON 接口,这些中间件还在链上,就会在 POST 时返回 403,或在无 cookie 场景下 panic。

















