Golang Gorilla Mux路由

在使用Golang的Gorilla Mux路由时遇到几个问题想请教:

  1. 如何定义带参数的路由,比如/users/{id}这样的路径?
  2. 中间件应该如何注册才能对所有路由生效?
  3. 路由分组功能要怎么实现,比如给所有API路由添加/api前缀?
  4. 处理静态文件时,Mux路由和标准库的http.FileServer应该如何配合使用?
  5. 有没有优雅的方法处理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,支持路由参数、正则表达式、中间件等功能。

主要特性

  1. 路径匹配:支持静态路径和带参数的路由(如 /users/{id})。
  2. 正则表达式:可对路由参数添加正则约束(如 {id:[0-9]+})。
  3. 方法匹配:限制路由仅处理特定 HTTP 方法(如 GET、POST)。
  4. 中间件支持:可添加认证、日志等中间件。
  5. 子路由:通过路径前缀创建路由组。

基本用法

  1. 安装

    go get -u github.com/gorilla/mux
    
  2. 示例代码

    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 应用。

回到顶部