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

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

如何在遵守接口上的 golang CodeReviewComments 規(guī)則的同時執(zhí)行正確的構(gòu)造?

如何在遵守接口上的 golang CodeReviewComments 規(guī)則的同時執(zhí)行正確的構(gòu)造?

Go
慕的地8271018 2023-04-17 16:07:04
官方 Go Code Review Comments 文檔中的Interfaces規(guī)則說包應(yīng)該返回具體類型而不是接口。這樣做的動機(jī)是:...可以將新方法添加到實現(xiàn)中,而無需進(jìn)行大量重構(gòu)。我接受這可能是一件好事。但是,如果我正在編寫的類型具有依賴性,沒有它就無法達(dá)到目的怎么辦?如果我導(dǎo)出具體類型,開發(fā)人員將能夠在沒有該依賴性的情況下實例化實例。為了針對缺失的依賴項進(jìn)行防御性編碼,我必須在每個方法實現(xiàn)中檢查它,如果不存在則返回錯誤。如果開發(fā)人員在我的文檔中遺漏了任何不要這樣做的提示,她或他將在運行時之前不會了解問題。另一方面,如果我用客戶端需要的方法聲明并返回一個接口,我可以取消導(dǎo)出具體類型并強(qiáng)制使用接受依賴項作為參數(shù)并返回接口和錯誤的工廠方法。這似乎是確保正確使用包的更好方法。通過這樣的思考,我是否以某種方式?jīng)]有正確地進(jìn)入 go 精神?語言的道德規(guī)范是否可以通過不完美的封裝來為開發(fā)人員提供更大的靈活性?
查看完整描述

1 回答

?
www說

TA貢獻(xiàn)1775條經(jīng)驗 獲得超8個贊

您可能希望開發(fā)人員閱讀您提供的文檔,并且您可以按照您設(shè)置的規(guī)則依賴他們。是的,懶惰的開發(fā)人員時不時會撞到腦袋,但開發(fā)的過程并非不需要學(xué)習(xí)。一切都不能明確或強(qiáng)制執(zhí)行,這沒關(guān)系。

如果你有一個導(dǎo)出的結(jié)構(gòu)類型Example并且你提供了一個構(gòu)造函數(shù)NewExample(),那就是一個明確的指示,NewExample()應(yīng)該用來構(gòu)造 的值Example。任何試圖手動構(gòu)建的人Example都應(yīng)該知道必須設(shè)置哪些字段才能使其“可操作”。目標(biāo)始終是使零值完全發(fā)揮作用,但如果無法實現(xiàn),則構(gòu)造函數(shù)是慣用的方法。

這并不少見,標(biāo)準(zhǔn)庫中有無數(shù)示例,例如http.Request,?json.Encoder,?json.Decoder,?io.SectionReader,?template.Template。

您必須確保的是,如果您的包返回結(jié)構(gòu)的值,則必須(應(yīng)該)正確初始化它們。而且,如果其他人希望傳遞他們創(chuàng)建的結(jié)構(gòu)的值,則您必須為他們提供一種簡單的方法來創(chuàng)建結(jié)構(gòu)的有效值(構(gòu)造函數(shù))。其他開發(fā)人員自己創(chuàng)建的自定義結(jié)構(gòu)值是否“有效”,這與您無關(guān)。


查看完整回答
反對 回復(fù) 2023-04-17
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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