我希望函数的行为能够根据接收器进行更改。或者真的,我想要一种方法能够接收不同的接收器作为输入。例如
type handler func(http.ResponseWriter, *http.Request, *Context)
type requireloggedinhandler handler
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
ctx := setupContext(...)
// NEXT LINE IS THE KEY LINE
if (reflect.TypeOf(h) == main.requireloggedinhandler) {
if !checkedLoggedIn(ctx) {
http.Redirect(...)
return
}
}
h(w, r, ctx)
}
但问题是,一旦我们到达ServeHTTP,类型必须是处理程序,而不是requireloggedinhandler。例如,这将不起作用
r.HandleFunc("/", requireloggedinhandler(MyFunc).ServeHTTP)
我可以输入ServeHTTP作为处理程序的继承接口吗?
答案 0 :(得分:3)
请勿使用r.HandleFunc
直接使用r.Handle("/", MyFunc)