路由别名必须注册时通过第三个字符串参数指定,重复或含非法字符会panic;URI生成需严格匹配参数键名大小写;模板中需手动注册url函数才能使用别名。

路由别名必须在注册时直接指定,不能事后补;别名重复会 panic,参数键名大小写敏感,拼错就生成不出正确 URL。
别名只能在 Get/Post 等注册时传第三个字符串参数
别名不是靠赋值给 Route.Name 字段(那是另一套机制),而是 Iris 提供的显式别名系统:注册路由时,把别名作为第三个参数传进去。这个参数只接受纯字符串,不能含空格、点号以外的特殊字符(如 @、/、*)。
-
iris.Get("/users/{id:int}", handler, "user.detail")✅ 正确,别名生效 -
iris.Get("/users/{id:int}", handler).Name = "user.detail"❌ 无效,这套命名不参与 URI 生成逻辑 -
iris.Get("/users/{id:int}", handler, "user/detail")❌ 启动 panic:invalid route name "user/detail"
用 Router().URI() 生成 URL 时参数必须严格匹配
c.Router().URI() 是运行时生成路径的核心方法,它依赖别名 + 参数 map 的精确匹配。一旦参数 key 和路由定义里的变量名不一致(比如路由是 {uid:int64},却传 iris.Map{"UID": 123}),结果就是原样保留占位符:/users/{uid:int64},而不是报错。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 参数 key 必须和花括号内变量名完全一致,包括大小写:
{userID:string}→ 要传"userID",不是"userid"或"UserId" - 类型标注不影响匹配,但影响参数解析:没写
:int的{id}也能被Get("id")取到,但GetInt("id")会失败 - 多参数示例:
c.Router().URI("post.edit", iris.Map{"category": "go", "slug": "iris-routing"})→/posts/go/iris-routing
模板里调用别名要提前注册自定义函数
Iris 默认模板(html/template)不带 urlpath 函数,必须手动注册才能在 HTML 中用 {{ url "user.detail" .ID }} 这类写法。
- 注册方式(通常在
app.Run前):app.RegisterView(iris.HTML("./views", ".html").Funcs(map[string]interface{}{"url": func(name string, args interface{}) string { return app.GetRouter().URI(name, args) }})) - 模板中使用:
<a href="{{ url "user.detail" (dict "id" 456) }}">用户页</a>(注意dict是 Go 模板内置函数,用于构造 map) - 别名未注册或拼错时,模板渲染不会报错,只会输出空字符串 —— 很难排查
最容易被忽略的是:别名系统和 Route.Name 完全无关,两套并存但互不打通;你用了别名就得全程用 Router().URI(),混用 Route.Name + urlpath 模板函数会导致 404 或空链接。


















