猿问

不能使用 ResponseErrorWriter 文字作为 GO 中的类型错误

在我的GO项目中,我在server.go文件中遇到错误,


mygo/testkit/pkg/http/server pkg\http\server\server.go:24:不能使用 ResponseErrorWriter 文字(类型 ResponseErrorWriter)作为类型

赋值中的tigertonic.ErrorWriter:ResponseErrorWriter 没有实现tigertonic.ErrorWriter(缺少WriteError 方法)


这是我的init()函数,它给出了server.go.


func init() {

    tt.ResponseErrorWriter = ResponseErrorWriter{}

    tt.SnakeCaseHTTPEquivErrors = false // Ignored in ResponseErrorWriter anyway.

}

我在这一行得到了错误,


tt.ResponseErrorWriter = ResponseErrorWriter{}

这个错误的原因是什么?如何解决这个问题?我是这个 GO 框架的新手。


HUX布斯
浏览 190回答 2
2回答

狐的传说

您的问题依赖于原始源代码中的以下行: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{}

有只小跳蛙

从消息来看,ResponseErrorWriter不是tigertonic.ErrorWriter。这意味着您尚未创建type ResponseErrorWriter struct实现 interface tigertonic.ErrorWriter,因此您要做的是初始化与预期接口不匹配的结构。消息很清楚,您需要实现该WriteError方法。
随时随地看视频慕课网APP

相关分类

Go
我要回答