亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不能使用 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 關注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號