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 关注
- 189 浏览
添加回答
举报