为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
HUX布斯 2022-01-10 16:54:03
在我的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 框架的新手。
查看完整描述

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{}


查看完整回答
反对 回复 2022-01-10
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

从消息来看,ResponseErrorWriter不是tigertonic.ErrorWriter。这意味着您尚未创建type ResponseErrorWriter struct实现 interface tigertonic.ErrorWriter,因此您要做的是初始化与预期接口不匹配的结构。

消息很清楚,您需要实现该WriteError方法。


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信