gpt4 book ai didi

go - 如何将我的 AppHandler 添加到我的路由中?

转载 作者:IT王子 更新时间:2023-10-29 02:23:57 26 4
gpt4 key购买 nike

我正在尝试按照 The Go Blog: Error handling and Go 中的描述实现 appHandler .我有 appHandler,现在我只是想将它连接到我的路线。以下作品:

router := new(mux.Router)
router.Handle("/my/route/", handlers.AppHandler(handlers.MyRoute))

但是,我希望能够允许 GET 请求以及具有“StrictSlash(true)”。我有:

type Routes []Route
type Route struct {
Method string
Pattern string
HandlerFunc http.HandlerFunc
}


var routes = Routes{
Route{"GET", "/my/route/", handlers.AppHandler(handlers.MyRoute)}
}
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
router.Methods(route.Method).Path(route.Pattern).Handler(handler)
}

AppHandler 看起来像:

type AppHandler func(http.ResponseWriter, *http.Request) *appError

func (fn AppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// blah, blah, blah
}

我得到一个错误:

cannot use handlers.AppHandler(handlers.MyRoute) (type handlers.AppHandler) as type http.HandlerFunc in field value

最佳答案

您的AppHandler 不是http.HandlerFunc,而是http.Handler

http.HandlerFunc 只是一个同时接受 http.ResponseWriter*http.Request 的函数。

http.Handler 是一个接口(interface),任何具有方法 ServeHTTP(w http.ResponseWriter, r *http.Request)

的类型都满足该接口(interface)

将结构更改为类似

type Route struct {
Method string
Pattern string
Handler http.Handler
}

然后在底部你可能会做

for _, route := range routes {
router.Methods(route.Method).Path(route.Pattern).Handler(route.Handler)
}

关于go - 如何将我的 AppHandler 添加到我的路由中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30496470/

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