1 回答

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
對(duì)于這樣常見且簡(jiǎn)單的接口,我肯定會(huì)嵌入標(biāo)準(zhǔn)庫(kù)中的接口(例如io.Closer
,io.Reader
和io.ByteReader
)。
但不是任何接口類型。一般來(lái)說(shuō),接口應(yīng)該在需要的地方定義。嵌入在其他包(包括標(biāo)準(zhǔn)庫(kù))中定義的任何接口都有在更改或擴(kuò)展時(shí)無(wú)法隱式實(shí)現(xiàn)它們的危險(xiǎn)。
包的“所有者”(定義者)可能會(huì)更改它(例如用新方法擴(kuò)展它)并正確更新實(shí)現(xiàn)它的所有類型,因此包可以繼續(xù)從外部工作,但顯然包所有者不會(huì)更新你的實(shí)現(xiàn)。
例如,接口類型在Go 1.0reflect.Type
中沒(méi)有Type.ConvertibleTo()
方法,它是在Go 1.1中添加的。同樣的事情也可能發(fā)生:標(biāo)準(zhǔn)庫(kù)中的接口可能會(huì)在未來(lái)的 Go 版本中被更改或擴(kuò)展,導(dǎo)致您現(xiàn)有的代碼無(wú)法實(shí)現(xiàn)它們。
小型通用接口和“其余”之間有什么區(qū)別?接口越大,抽象越弱——Go 諺語(yǔ)也是如此。小接口喜歡io.Closer
并io.Reader
捕獲一個(gè)微小但重要的功能。它們是如此普遍,“每個(gè)”庫(kù)都試圖實(shí)現(xiàn)它們,每個(gè)實(shí)用函數(shù)都建立在它們之上。我從沒(méi)想過(guò)他們會(huì)改變。如果有理由更改/擴(kuò)展它們,它們將被添加為新接口。不像更大的接口,抽象更難準(zhǔn)確捕獲。隨著時(shí)間的推移,他們有更好的機(jī)會(huì)改變/發(fā)展。
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報(bào)