作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试按照 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)
将结构更改为类似
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/
我正在尝试按照 The Go Blog: Error handling and Go 中的描述实现 appHandler .我有 appHandler,现在我只是想将它连接到我的路线。以下作品: ro
我是一名优秀的程序员,十分优秀!