在鏈接處理程序時,該函數的返回類型為 Handler,但它實際上返回一個 HandlerFunc。這不會引發任何錯誤。如何接受 HandlerFunc 來代替 Handler,前者是函數類型,后者是接口類型?func log(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ... })}
2 回答

守著星空守著你
TA貢獻1799條經驗 獲得超8個贊
HandlerFunc 類型是一個適配器,允許使用普通函數作為 HTTP 處理程序。如果 f 是具有適當簽名的函數,則 HandlerFunc(f) 是調用 f 的 Handler。
這http.Handler是一個接口:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
這http.HandlerFunc是一個類型:
type HandlerFunc func(ResponseWriter, *Request)
// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}

慕田峪7331174
TA貢獻1828條經驗 獲得超13個贊
http.Handler
是一個接口。http.HandlerFunc
是實現該接口的具體類型。這一切都記錄在http
包文檔中。如果您對界面不熟悉,請從A Tour of Go開始。
- 2 回答
- 0 關注
- 196 瀏覽
添加回答
舉報
0/150
提交
取消