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

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

我應該從標準庫嵌入接口還是自己編寫?

我應該從標準庫嵌入接口還是自己編寫?

Go
開心每一天1111 2022-10-24 16:25:53
Go 的標準庫中有一些通用接口,例如io.Closer:type Closer interface {    Close() error}如果我想在我的代碼中定義一個具有Close方法的接口,我會像這樣嵌入io.Closer:type example interface {    io.Closer    // ... some other functions or embedded types}還是我只是定義函數本身,如:type example interface {    Close() error    // ... some other functions or embedded types}有什么最佳做法嗎?
查看完整描述

1 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

對于這樣常見且簡單的接口,我肯定會嵌入標準庫中的接口(例如io.Closer,io.Readerio.ByteReader)。

但不是任何接口類型。一般來說,接口應該在需要的地方定義。嵌入在其他包(包括標準庫)中定義的任何接口都有在更改或擴展時無法隱式實現它們的危險。

包的“所有者”(定義者)可能會更改它(例如用新方法擴展它)并正確更新實現它的所有類型,因此包可以繼續從外部工作,但顯然包所有者不會更新你的實現。

例如,接口類型在Go 1.0reflect.Type中沒有Type.ConvertibleTo()方法,它是在Go 1.1中添加的。同樣的事情也可能發生:標準庫中的接口可能會在未來的 Go 版本中被更改或擴展,導致您現有的代碼無法實現它們。

小型通用接口和“其余”之間有什么區別?接口越大,抽象越弱——Go 諺語也是如此。小接口喜歡io.Closerio.Reader捕獲一個微小但重要的功能。它們是如此普遍,“每個”庫都試圖實現它們,每個實用函數都建立在它們之上。我從沒想過他們會改變。如果有理由更改/擴展它們,它們將被添加為新接口。不像更大的接口,抽象更難準確捕獲。隨著時間的推移,他們有更好的機會改變/發展。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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