Revel 框架控制器由框架按约定自动生成,无需手动创建或注册;需置于 app/controllers 下、包名为 app,方法首字母大写且返回 revel.Result,路由须在 conf/routes 中显式声明。

Revel 框架的控制器不是手动“创建”的,而是由框架按约定自动生成骨架;你只需要在 app/controllers 下写 Go 文件、定义结构体和方法,Revel 就能识别并路由——跳过任何“注册”步骤是它的核心设计。
控制器文件必须放在 app/controllers 目录下
Revel 不扫描任意路径,只认固定位置。如果你把控制器放在 controllers/(缺 app/ 前缀)或 internal/controllers,它完全不会加载,也不会报错,只会 404。
- 正确路径:
app/controllers/home.go - 错误路径:
controllers/home.go、app/handlers/home.go、home.go - 文件名不重要,但包名必须是
app(不是main或controllers)
App 结构体是默认控制器,方法名即路由动作
Revel 把 app/controllers/app.go 中的 App 结构体当作默认控制器。每个公开方法(首字母大写)自动对应一个 HTTP 动作,比如 Index → GET /,Show → GET /show。
- 方法签名必须返回
revel.Result,且第一个参数是*App指针 - 不要手动调用
revel.Broker.Register或类似注册逻辑——Revel 在启动时自动反射扫描 - 示例最小合法方法:
func (c App) Index() revel.Result { return c.Render() }
路由定义不在控制器里,而在 conf/routes
控制器方法写完后,必须显式在 conf/routes 中声明路径与方法的映射,否则请求进不来。格式是 HTTP_METHOD PATH CONTROLLER.METHOD。
- 常见错误:写了
func (c App) About() revel.Result,但忘了在routes加一行GET /about App.About - 路径支持参数:
GET /user/{id:int} App.User→id会自动转为int并注入到方法参数 - 注意大小写:方法名是
About,就不能写成about或ABOUT
最容易被忽略的是 conf/routes 的语法空格和大小写敏感性——少一个空格、多一个 tab、方法名拼错,都会导致路由静默失效,且开发服务器不提示。改完 routes 后务必重启 revel run,它不会热重载路由表。


















