1 回答

TA贡献1808条经验 获得超4个赞
http.Handle()
需要一个实现 的值(任何值)http.Handler
,这意味着它必须有一个ServeHTTP()
方法。
您为该templateHandler.ServeHTTP()
方法使用了指针接收器,这意味着只有指针值才有templateHandler
此方法,而不是非指针templateHandler
类型的指针值。
规格: 方法集:
类型可以具有与其关联的方法集。接口类型的方法集就是它的接口。任何其他类型的方法集由使用接收者类型声明的
T
所有方法T
组成。对应指针类型 的方法集是用receiver或*T
声明的所有方法的集合(即还包含 的方法集)。*T
T
T
非指针类型仅具有带有非指针接收器的方法。指针类型具有带有指针和非指针接收器的方法。
您的ServeHTTP()
方法修改了接收者,因此它必须是一个指针。但如果其他处理程序不需要,则ServeHTTP()
可以使用非指针接收器创建该方法,在这种情况下,您可以使用非指针值作为http.Handler
,如下例所示:
type myhandler struct{}
func (m myhandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {}
func main() {
// non-pointer struct value implements http.Handler:
http.Handle("/", myhandler{})
}
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报