无法将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
很好。