2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
您的問(wèn)題依賴于原始源代碼中的以下行:
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這意味著它的類型是一個(gè)自定義類型,它實(shí)現(xiàn)了接口內(nèi)聲明的方法。這意味著您必須實(shí)現(xiàn)聲明為接口的方法。
接口定義了一組方法(方法集),但這些方法不包含代碼:它們沒(méi)有實(shí)現(xiàn)(它們是抽象的)。Go 中的接口是結(jié)構(gòu)和它們需要實(shí)現(xiàn)的方法之間的某種契約。
如果你真的需要實(shí)現(xiàn)你的ErrorWriter接口,你需要聲明你的自定義結(jié)構(gòu),它實(shí)現(xiàn)了原始ErrorWriter接口中定義的方法。然后你需要調(diào)用聲明的方法。你想如何處理錯(cuò)誤這一切都取決于你。
如果您檢查源代碼,您將看到它以下列方式實(shí)現(xiàn):
func (d defaultErrorWriter) WriteError(r *http.Request, w http.ResponseWriter, err error) {
if acceptJSON(r) {
d.WriteJSONError(w, err)
} else {
d.WritePlaintextError(w, err)
}
}
唯一剩下的是將局部結(jié)構(gòu)變量定義為:
type defaultErrorWriter struct{}

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
從消息來(lái)看,ResponseErrorWriter
不是tigertonic.ErrorWriter
。這意味著您尚未創(chuàng)建type ResponseErrorWriter struct
實(shí)現(xiàn) interface tigertonic.ErrorWriter
,因此您要做的是初始化與預(yù)期接口不匹配的結(jié)構(gòu)。
消息很清楚,您需要實(shí)現(xiàn)該WriteError
方法。
- 2 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報(bào)