路由与路径参数
注册处理器并解析 URL 参数
路由与路径参数 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
标准多路复用器的限制
默认的 http.ServeMux 不支持路径参数(例如 /users/{id}),也不支持基于方法的路由。Go 1.22 增强了模式支持。
Go 1.22 增强的模式
从 Go 1.22 开始,ServeMux 支持方法前缀和路径参数:
mux.HandleFunc("GET /users/{id}", func(w http.ResponseWriter, r *http.Request) {
id := r.PathValue("id")
fmt.Fprintln(w, "user:", id)
})r.PathValue
r.PathValue("name") 会从 URL 模式中提取命名片段(Go 1.22 及更高版本)。
// Pattern: "GET /products/{category}/{id}"
category := r.PathValue("category")
id := r.PathValue("id")手动解析路径
对于 Go < 1.22 或复杂规则,请使用 strings.Split(r.URL.Path, "/") 提取路径片段:
parts := strings.Split(strings.Trim(r.URL.Path, "/"), "/")
// /users/42 → ["users", "42"]方法路由
请在单个处理程序中使用针对 r.Method 的 switch,为不同方法实现相应逻辑:
switch r.Method {
case http.MethodGet:
getHandler(w, r)
case http.MethodPost:
createHandler(w, r)
default:
w.WriteHeader(http.StatusMethodNotAllowed)
}常用第三方路由器
gorilla/mux、chi 和 httprouter 等库提供了更丰富的路由功能:正则表达式约束、命名组、中间件链和子路由器。
chi 路由器
chi 是一个轻量、符合 Go 习惯且兼容 net/http 处理程序的路由器:
r := chi.NewRouter()
r.Get("/users/{id}", getUser)
http.ListenAndServe(":8080", r)查询参数
请从 r.URL.Query() 中读取查询参数,该方法会返回一个 url.Values 映射:
page := r.URL.Query().Get("page")
if page == "" { page = "1" }通配符和捕获全部路径
在 Go 1.22 的模式中,{name...} 是一个匹配路径其余部分的通配符:
mux.HandleFunc("/static/{path...}", serveStatic)嵌套路由
请使用子路由器,或通过注册具有相同前缀的处理程序,将相关路由分组。chi 的 r.Route 会为某个前缀创建子路由器。
尾部斜杠重定向
http.ServeMux 会自动将 /path/ 重定向到 /path,或执行反向重定向。若要禁用此行为,请在多路复用器接收请求前,在中间件中移除尾部斜杠。
快速检查
在 Go 1.22 及更高版本中,如何从匹配的 URL 模式中提取 {id} 片段?
回顾:路由和路径参数
关键要点:
- Go 1.22:ServeMux 中的方法前缀 + {name} 路径参数
- r.PathValue("name") 提取命名片段
- 使用方法 switch 实现针对不同方法的逻辑
- 对于复杂路由,使用第三方路由器(chi、gorilla/mux)
常见问题解答
「路由与路径参数」课时是免费的吗?
是的 — 「路由与路径参数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「路由与路径参数」这节课中我会学到什么?
注册处理器并解析 URL 参数 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「路由与路径参数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 创建 HTTP 服务器
- 路由与路径参数
- 中间件模式
- 优雅关闭