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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我應(yīng)該從標(biāo)準(zhǔn)庫(kù)嵌入接口還是自己編寫?

我應(yīng)該從標(biāo)準(zhǔn)庫(kù)嵌入接口還是自己編寫?

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

1 回答

?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

對(duì)于這樣常見且簡(jiǎn)單的接口,我肯定會(huì)嵌入標(biāo)準(zhǔn)庫(kù)中的接口(例如io.Closer,io.Readerio.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.Closerio.Reader捕獲一個(gè)微小但重要的功能。它們是如此普遍,“每個(gè)”庫(kù)都試圖實(shí)現(xiàn)它們,每個(gè)實(shí)用函數(shù)都建立在它們之上。我從沒(méi)想過(guò)他們會(huì)改變。如果有理由更改/擴(kuò)展它們,它們將被添加為新接口。不像更大的接口,抽象更難準(zhǔn)確捕獲。隨著時(shí)間的推移,他們有更好的機(jī)會(huì)改變/發(fā)展。


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 1 回答
  • 0 關(guān)注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)