的interfaces portion of Golang CodeReviewComments狀態:
Go 介面通常屬于使用介面型別值的包,而不是實作這些值的包。實作包應該回傳具體的(通常是指標或結構)型別:這樣,新方法可以添加到實作中,而無需大量重構。
然而,Go 的context.go模塊既定義了Context介面,又為type emptyCtx int和實作了它type cancelCtx struct。
請注意,上面列出的部分表示它們“通常”屬于使用介面型別值的包——所以我理解這不是一個嚴格的規則。
但是,我很好奇使他們可以在context包中執行此操作的標準是什么。
此外,這假設CodeReviewComments是 Go 代碼審查和風格指南的規范資源。
uj5u.com熱心網友回復:
在同一個包中定義介面的實作實際上很常見,尤其是在實作策略模式或責任鏈(如背景關系)時。
以net包為例,它定義了Listener介面,還定義了TCPListener、UDPListener、 和UnixListener。在這種情況下,將功能放在另一個包中是不合邏輯的。
該IO包確實與讀者和作家類似的事情。
另一個方便的模式是為只有 1 個函式的介面定義函式別名。就像HandlerFunc如何實作Handler 一樣,允許用戶將閉包轉換為 HandlerFunc,這樣他們就不必定義自己的型別,這是更多的作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/362225.html
標籤:走
上一篇:尋找RexEx來替換字串中的字串
