在Gorilla mux处理后运行中间件

在Gorilla mux处理后运行中间件,go,gorilla,mux,Go,Gorilla,Mux,我试图在处理Gorilla Mux路由后使用Golang中间件运行,以便更改每个请求的响应 代码示例见下文。目前,它返回“run before,run test”,目标是使用runsafter中间件返回“run before,run test,run after” 大猩猩Mux有可能做到这一点吗 package main import ( "fmt" "github.com/gorilla/mux" "net/http" ) func runsbefore(h htt

我试图在处理Gorilla Mux路由后使用Golang中间件运行,以便更改每个请求的响应

代码示例见下文。目前,它返回“run before,run test”,目标是使用runsafter中间件返回“run before,run test,run after”

大猩猩Mux有可能做到这一点吗

package main

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

func runsbefore(h http.Handler) http.Handler {
    fn := func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("run before, "))
        h.ServeHTTP(w, r)
    }

    return http.HandlerFunc(fn)
}

func runsafter(h http.Handler) http.Handler {
    fn := func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("run after, "))
        h.ServeHTTP(w, r)
    }

    return http.HandlerFunc(fn)
}

func runtest(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("run test, "))
}

func main() {
    fmt.Println("Server starting on port 8000")
    r := mux.NewRouter()
    r.HandleFunc("/", runtest).Methods("GET")
    http.ListenAndServe(":8000", runsbefore(r))
    // something like: http.ListenAndServe(":8000", runsbefore(r(runsafter)))
}
使用

http.ListenAndServe(":8000", runsAfter(runsbefore(r)))
并修复
runsAfter
中的错误:

func runsafter(h http.Handler) http.Handler {
  fn := func(w http.ResponseWriter, r *http.Request) {
    h.ServeHTTP(w, r)
    w.Write([]byte("run after, "))
  }

  return http.HandlerFunc(fn)
}