iris控制器必须通过mvc.new()注册才能绑定路由和参数;方法名须大写http动词开头;路径参数需在beforeactivation中显式绑定且类型匹配;by前缀参数绑定仅限路径参数且严格区分大小写。

控制器必须注册到mvc.Application才能绑定路由
直接用 app.Get() 或 app.Party().Get() 定义的路由,不会触发控制器方法的自动扫描和绑定。Iris 的控制器路由绑定完全依赖 mvc.Application 实例——它才是路由与控制器方法之间的“翻译官”。
常见错误现象:写了 func (c *UserController) Get() string,也调用了 app.Party("/user").Handle(new(UserController)),但访问 /user 时 404。原因几乎一定是没用 mvc.New() 包一层。
- 正确写法:
mvc.New(app.Party("/user")).Handle(new(UserController)) - 错误写法:
app.Party("/user").Handle(new(UserController))(Party没有Handle方法,这行根本编译不过) - 更隐蔽的错法:
app.Handle(new(UserController))—— 这会尝试挂到根路径/,且忽略所有 Party 前缀和中间件配置
方法名必须以大写HTTP动词开头
Iris 默认只识别 Get、Post、Put、Patch、Delete、Head、Options、Trace 这八种前缀的方法,并自动映射到对应 HTTP 方法 + 根路径(如 Get() → GET /)。方法名里不能有下划线,首字母必须大写。
- 合法:
GetUsers、PostLogin、DeleteAvatar - 非法:
get_users(小写+下划线)、post_login(同上)、getUser(动词小写)、GETUsers(全大写动词) - 注意:
GetUsers不会自动挂到/users,它仍响应GET /;子路径必须显式声明
带参数的路径必须用BeforeActivation手动绑定
Iris 不会根据方法名或参数名自动推导路径变量。想让 GetByID 处理 GET /users/{id:long},就必须在 BeforeActivation 钩子里调用 b.Handle() 显式注册。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
常见错误现象:写了 func (c *UserController) GetByID(id int64) string,却始终收不到 id 值,打印出来永远是 0。
- 必须定义
BeforeActivation方法:func (c *UserController) BeforeActivation(b mvc.BeforeActivation) - 在钩子里绑定:
b.Handle("GET", "/{id:long}", "GetByID") - 路径参数类型要写对:
{id:long}对应int64,{name:string}才能接收字符串;写成{id}会导致绑定失败且静默归零 - 方法名必须严格匹配字符串参数:
"GetByID"要和函数名完全一致,大小写、拼写一个字符都不能差
By参数绑定对命名和路由格式极其敏感
使用 By 前缀接收路径参数(如 ByID int64)不是可选项,而是一套强约束机制:它只在 mvc.Application 环境下生效,且要求路由、控制器、方法签名三者严丝合缝。
- 路由中必须显式标注类型:
"/profile/{uid:int64}"✅,"/profile/{uid}"❌ - 控制器方法参数名必须是
By+ 路由键名首字母大写:{uid:int64}→ByUid int64,{user_id:string}→ByUserId string - 若参数名写成
Byuid或ByID,绑定失败但无任何报错,值为零值(0或"") - 该机制不适用于查询参数(
?page=1)或表单字段,仅限路径参数
最容易被忽略的是:所有这些绑定逻辑都建立在 mvc.New() 创建的应用实例之上。漏掉这一层,后面所有命名、参数、钩子都白搭——框架根本不会进入控制器扫描流程。










