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

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

如何在遵守接口上的 golang CodeReviewComments 規則的同時執行正確的構造?

如何在遵守接口上的 golang CodeReviewComments 規則的同時執行正確的構造?

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

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

您可能希望開發人員閱讀您提供的文檔,并且您可以按照您設置的規則依賴他們。是的,懶惰的開發人員時不時會撞到腦袋,但開發的過程并非不需要學習。一切都不能明確或強制執行,這沒關系。

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

這并不少見,標準庫中有無數示例,例如http.Request,?json.Encoder,?json.Decoder,?io.SectionReader,?template.Template。

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


查看完整回答
反對 回復 2023-04-17
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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