gpt4 book ai didi

go - 如何使用带有 http.TimeoutHandler 的 gorilla 多路复用器

转载 作者:IT王子 更新时间:2023-10-29 00:36:04 26 4
gpt4 key购买 nike

在用 go 编写的 HTTP 服务器中,我使用 gorilla/mux用于路由,
我想使用 http.TimeoutHandler(和/或其他“中间件”),但我不明白在哪里可以安装它们。

说清楚:

  1. 我通过 gorillaMux := mux.NewRouter() 创建了一个新的 Router
  2. 通过像 gorillaMux.HandleFunc("/", rootHandler) 这样的调用添加我的路由
  3. 我通过 server := &http.Server{Addr:":1234"}server.ListenAndServe()
  4. 创建服务器

我在哪里可以插入 http.TimeoutHandler 或与此相关的任何其他中间件?

最佳答案

这里是你如何做到这一点:

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)
}

如果您有多个 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!"))

关于go - 如何使用带有 http.TimeoutHandler 的 gorilla 多路复用器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com