第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Go:總是返回零錯誤來實現(xiàn)接口

Go:總是返回零錯誤來實現(xiàn)接口

Go
精慕HU 2022-11-23 20:36:36
我有一個interface:type encoder interface {    encode() ([]byte, error)}encoderreturn an 的一些實現(xiàn)error:type fooEncoder stringfunc (e fooEncoder) encode() ([]byte, error) {    if isSomeValidityCheck(e) {        return []byte(e), nil    }    return nil, fmt.Errorf("Invalid type!")}但是對于其他人來說,永遠不會有錯誤:type boolEncoder boolfunc (e boolEncoder) encode() ([]byte, error) {    if e {        return []byte{0xff}, nil    }    return []byte{0x00}, nil}說一個方法將返回一個錯誤是慣用的/正確的,即使它總是是nil,所以它符合一個interface?我只boolEncoder.encode返回一個error,以便它符合encoder并可以這樣使用。
查看完整描述

1 回答

?
慕運維8079593

TA貢獻1876條經(jīng)驗 獲得超5個贊

這完全正常/正常。通常實現(xiàn)接口比減少(方法的)代碼更重要。

標準庫中也有很多示例。

例如用bytes/Buffer.Write()_io.Writer

func (b *Buffer) Write(p []byte) (n int, err error)

但是寫入內(nèi)存緩沖區(qū)不會失敗,它記錄了它永遠不會返回非nil錯誤:

Write 將 p 的內(nèi)容附加到緩沖區(qū),根據(jù)需要增大緩沖區(qū)。返回值n為p的長度;錯誤總是 nil。如果緩沖區(qū)變得太大,Write 將因 ErrTooLarge 而崩潰。

Buffer.Write()可能有一個不返回任何東西的簽名,因為它的返回值不攜帶任何信息(n總是len(p)并且err總是nil),但是你不能使用bytes.Bufferas io.Writer,這更重要。

請參閱相關內(nèi)容:Go 中是否存在未命名參數(shù)?以及為什么 Go 允許編譯未使用的函數(shù)參數(shù)?


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號