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 關注
- 154 瀏覽
添加回答
舉報