gpt4 book ai didi

go - 一个通用的 http 处理程序而不是几个

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:03 25 4
gpt4 key购买 nike

是否可以不复制粘贴表达式 commonHanlder(handler1), commonHanlder(handler2) ... commonHanlder(handlerN) 在此代码:

rtr.HandleFunc("/", commonHanlder(handler1)).Methods("GET")
rtr.HandleFunc("/page2", commonHanlder(handler2)).Methods("GET")

然后把它放在一个地方,比如

http.ListenAndServe(":3000", commonHanlder(http.DefaultServeMux))

但是这个变体不起作用并且在编译时给出了两个错误:

./goRelicAndMux.go:20: cannot use http.DefaultServeMux (type *http.ServeMux) as type gorelic.tHTTPHandlerFunc in argument to commonHanlder
./goRelicAndMux.go:20: cannot use commonHanlder(http.DefaultServeMux) (type gorelic.tHTTPHandlerFunc) as type http.Handler in argument to http.ListenAndServe:
gorelic.tHTTPHandlerFunc does not implement http.Handler (missing ServeHTTP method)

完整代码:

package main

import (
"github.com/gorilla/mux"
"github.com/yvasiyarov/gorelic"
"log"
"net/http"
)

func main() {
initNewRelic()
rtr := mux.NewRouter()
var commonHanlder = agent.WrapHTTPHandlerFunc

rtr.HandleFunc("/", commonHanlder(handler1)).Methods("GET")
rtr.HandleFunc("/page2", commonHanlder(handler2)).Methods("GET")

http.Handle("/", rtr)
log.Println("Listening...")
http.ListenAndServe(":3000", http.DefaultServeMux)
}

func handler1(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("mainPage"))
}

func handler2(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("page 2"))
}

var agent *gorelic.Agent

func initNewRelic() {
agent = gorelic.NewAgent()
agent.Verbose = true
agent.NewrelicName = "test"
agent.NewrelicLicense = "new relic key"
agent.Run()
}

最佳答案

您似乎想在应用程序的根目录上调用 commonHandler 并让它为所有应用程序工作。由于您使用的是多路复用器,因此只需包装一次多路复用器路由器即可。

func main() {
initNewRelic()
rtr := mux.NewRouter()
var commonHandler = agent.WrapHTTPHandler

rtr.HandleFunc("/", handler1).Methods("GET")
rtr.HandleFunc("/page2", handler2).Methods("GET")

http.Handle("/", commonHandler(rtr))
log.Println("Listening...")
http.ListenAndServe(":3000", nil)
}

我还删除了 ListenAndServe 中的 http.DefaultServeMux 引用,因为传递 nil 将自动使用默认值。

关于go - 一个通用的 http 处理程序而不是几个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777972/

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