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