如何使用带有http.TimeoutHandler的gorilla mux

Ali*_*Ali 4 middleware go gorilla

在用go编写的HTTP服务器中,我使用gorilla/mux进行路由,
我想使用http.TimeoutHandler(和/或其他"中间件"),但我无法理解我可以适应它们的位置.

说清楚:

  1. 我创建了一个新的路由器 gorillaMux := mux.NewRouter()
  2. 通过类似的电话添加我的路线 gorillaMux.HandleFunc("/", rootHandler)
  3. 我用server := &http.Server{Addr:":1234"}和创建服务器server.ListenAndServe()

我在哪里可以插入该问题http.TimeoutHandler或任何其他中间件?

Kav*_*avu 10

以下是如何执行此操作的方法:

package main

import (
    "fmt"
    "github.com/gorilla/mux"
    "net/http"
    "time"
)

func rootHandler(w http.ResponseWriter, r *http.Request) {
    time.Sleep(5 * time.Second)
    fmt.Fprintf(w, "Hello!")
}

func main() {
    mux := mux.NewRouter()
    mux.HandleFunc("/", rootHandler)

    muxWithMiddlewares := http.TimeoutHandler(mux, time.Second*3, "Timeout!")

    http.ListenAndServe(":8080", muxWithMiddlewares)
}
Run Code Online (Sandbox Code Playgroud)

如果您有多个HTTP处理程序,则可以将它们堆叠起来:

// this is quite synthetic and ugly example, but it illustrates how Handlers works
muxWithMiddlewares := http.StripPrefix("/api", http.TimeoutHandler(mux, time.Second*3, "Timeout!"))
Run Code Online (Sandbox Code Playgroud)