Revel路由必须严格匹配:HTTP方法大写、各字段间仅单空格、控制器名与方法名大小写全等;否则静默404。需分两行定义GET/POST同路径,:id参数名及顺序须与方法签名一致,*filepath通配符必须置于路径末尾且前带斜杠。

conf/routes 文件格式必须严格对齐
Revel 不解析错位或大小写错误的路由行,写错就静默失效,请求直接 404。关键约束有三个:GET 和 POST 必须大写;HTTP 方法、路径、控制器方法之间**只允许一个空格**;控制器名和方法名必须与 Go 代码中完全一致(包括首字母大写)。
常见错误示例:
-
get /login app.Login→ 方法名小写,Revel 不识别 -
GET /login App.Login→ 方法名前多一个空格,解析失败 -
GET /login App.Login()→ 括号是语法错误,routes 文件不支持函数调用写法
第一行还必须是注释,如 # This file defines all application routes,否则某些旧版本 Revel 会跳过整个文件。
同一路径要支持 GET 和 POST 必须拆成两行
Revel 不支持 GET|POST /form 这类写法。想让 /form 同时响应表单展示(GET)和提交(POST),就得在 conf/routes 里明确写两行:
GET /form App.ShowFormPOST /form App.HandleForm
这两行路径必须完全一致(包括末尾斜杠),否则访问 /form/ 时,GET /form 这条根本不会命中。另外,POST /login 路由不会响应浏览器直接 GET 访问 —— 它只会返回 404,Revel 从不 fallback 到其他方法。
路径参数绑定依赖路由定义与方法签名严格匹配
路径中写 :id,控制器方法就必须声明同名参数,且类型、顺序、大小写全部一致。例如:
GET /users/:id Users.Show → 对应 func (c Users) Show(id int) revel.Result
如果方法写成 Show(ID int) 或 Show(uid int),绑定失败,请求仍 404,框架也不报错。多参数时更敏感:
GET /companies/:cid/departments/:did Companies.ShowDept → 必须是 func (c Companies) ShowDept(cid string, did string) revel.Result
参数名 cid 和 did 必须与路由中 :cid、:did 完全一致;顺序颠倒,值就会错配。
通配符路由 *filepath 必须放在路径末尾且带斜杠
静态资源路由如 GET /public/*filepath Static.Serve("public") 是唯一推荐方式。这里 *filepath 不是正则,而是 Revel 特殊语法,它要求:
-
*filepath前必须有斜杠,即/public/*filepath✅,/public*filepath❌ -
c.Params.Get("filepath")返回值自带开头斜杠,比如请求/public/css/app.css时得到的是/css/app.css - 拼文件路径时若误写成
"public/" + filepath,会变成public//css/app.css,某些环境拒绝读取
另外,这种通配符路由优先级低于字面量路径,所以必须放在 conf/routes 靠后位置,否则可能被前面的 GET /:action 类通配规则提前捕获。











