无法将ResponseErrorWriter文字(类型ResponseErrorWriter)用作GO中的类型错误
在我的无法将ResponseErrorWriter文字(类型ResponseErrorWriter)用作GO中的类型错误,go,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
项目中,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{}
这个错误的原因是什么?如何解决这个问题?我是这个围棋框架的新手。从消息中可以看出,ResponseErrorWriter
不是一个tigertonic.ErrorWriter
。这意味着您尚未创建实现接口tigertonic.ErrorWriter
的类型ResponseErrorWriter struct
,因此您尝试的是初始化与预期接口不匹配的结构
消息很清楚,您需要实现WriteError
方法。从消息中,ResponseErrorWriter
不是tigertonic.ErrorWriter
。这意味着您尚未创建实现接口tigertonic.ErrorWriter
的类型ResponseErrorWriter struct
,因此您尝试的是初始化与预期接口不匹配的结构
信息很清楚,您需要实现WriteError
方法。您的问题依赖于原始版本中的以下行:
分析上面的代码,很明显,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
被定义为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{}
我已经通过,import(tt“github.com/rcrowley/go-tigertonic”)
导入了go-tigertonic
,然后我在init()
中初始化了ResponceErrorWriter
,就像,tt.ResponseErrorWriter=ResponseErrorWriter{}
那么我应该在哪里实现WriteError
?您创建了ErrorResponseWriter结构吗?我已经通过导入go tigertonic
,import(tt“github.com/rcrowley/go tigertonic”)
导入了ResponceErrorWriter
,然后我在init()
中初始化,tt.ResponseErrorWriter=ResponseErrorWriter{}
那么我应该在哪里实现writeErrorWriter
?您创建了ErrorResponseWriter结构吗?所以我应该在哪里实现ErrorWriter
?有一个默认的ErrorWriter。如果您不想以特定的方式编写它们,可以使用默认值,这样就可以了。为了了解它是如何写入错误的,您可以在此处查看此默认ErrorWriter
的源代码。为什么需要从原始代码中重写ErrorWriter
?你对此有什么真正的理由吗?如果没有,您可以使用默认的ErrorWriter
很好。因此,我应该在哪里实现ErrorWriter
?有一个默认的ErrorWriter。如果您不想以特定的方式编写它们,可以使用默认值,这样就可以了。为了了解它是如何写入错误的,您可以在此处查看此默认ErrorWriter
的源代码。为什么需要从原始代码中重写ErrorWriter
?你对此有什么真正的理由吗?如果没有,您可以使用默认的ErrorWriter
很好。