2 回答
TA貢獻1804條經驗 獲得超3個贊
您的問題依賴于原始源代碼中的以下行:
var ResponseErrorWriter ErrorWriter = defaultErrorWriter{}
type ErrorWriter interface {
WriteError(r *http.Request, w http.ResponseWriter, err error)
WriteJSONError(w http.ResponseWriter, err error)
WritePlaintextError(w http.ResponseWriter, err error)
}
分析上面的代碼很明顯,ResponseErrorWriter定義為ErrorWriter這意味著它的類型是一個自定義類型,它實現了接口內聲明的方法。這意味著您必須實現聲明為接口的方法。
接口定義了一組方法(方法集),但這些方法不包含代碼:它們沒有實現(它們是抽象的)。Go 中的接口是結構和它們需要實現的方法之間的某種契約。
如果你真的需要實現你的ErrorWriter接口,你需要聲明你的自定義結構,它實現了原始ErrorWriter接口中定義的方法。然后你需要調用聲明的方法。你想如何處理錯誤這一切都取決于你。
如果您檢查源代碼,您將看到它以下列方式實現:
func (d defaultErrorWriter) WriteError(r *http.Request, w http.ResponseWriter, err error) {
if acceptJSON(r) {
d.WriteJSONError(w, err)
} else {
d.WritePlaintextError(w, err)
}
}
唯一剩下的是將局部結構變量定義為:
type defaultErrorWriter struct{}
TA貢獻1824條經驗 獲得超8個贊
從消息來看,ResponseErrorWriter不是tigertonic.ErrorWriter。這意味著您尚未創建type ResponseErrorWriter struct實現 interface tigertonic.ErrorWriter,因此您要做的是初始化與預期接口不匹配的結構。
消息很清楚,您需要實現該WriteError方法。
- 2 回答
- 0 關注
- 223 瀏覽
添加回答
舉報
