Golang Gorilla Mux路由
在使用Golang的Gorilla Mux路由时遇到几个问题想请教:
- 如何定义带参数的路由,比如
/users/{id}这样的路径? - 中间件应该如何注册才能对所有路由生效?
- 路由分组功能要怎么实现,比如给所有API路由添加
/api前缀? - 处理静态文件时,Mux路由和标准库的
http.FileServer应该如何配合使用? - 有没有优雅的方法处理OPTIONS请求以实现CORS支持?
2 回复
Golang中Gorilla Mux是强大的HTTP路由库,支持路径匹配、变量提取、中间件等。使用简单,性能优秀,适合构建RESTful API。
更多关于Golang Gorilla Mux路由的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang 的 Gorilla Mux 是一个功能强大的 HTTP 路由库,常用于构建 RESTful API 和 Web 服务。它扩展了 Go 标准库的 http.ServeMux,支持路由参数、正则表达式、中间件等功能。
主要特性
- 路径匹配:支持静态路径和带参数的路由(如
/users/{id})。 - 正则表达式:可对路由参数添加正则约束(如
{id:[0-9]+})。 - 方法匹配:限制路由仅处理特定 HTTP 方法(如 GET、POST)。
- 中间件支持:可添加认证、日志等中间件。
- 子路由:通过路径前缀创建路由组。
基本用法
-
安装:
go get -u github.com/gorilla/mux -
示例代码:
package main import ( "fmt" "log" "net/http" "github.com/gorilla/mux" ) func main() { r := mux.NewRouter() // 定义路由:GET /users/{id} r.HandleFunc("/users/{id}", func(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) id := vars["id"] fmt.Fprintf(w, "User ID: %s", id) }).Methods("GET") // 启动服务器 log.Fatal(http.ListenAndServe(":8080", r)) }
常用操作
- 路径参数:通过
mux.Vars(r)获取。 - 方法限制:使用
.Methods("GET", "POST")。 - 主机名匹配:
.Host("example.com")。 - 查询参数:结合标准库
r.URL.Query().Get("key")使用。
中间件示例
func loggingMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Println(r.RequestURI)
next.ServeHTTP(w, r)
})
}
// 使用中间件
r.Use(loggingMiddleware)
Gorilla Mux 提供了灵活的路由配置,适合构建复杂的 Web 应用。

