老外總結的14條Go介面最佳實踐,有些不一樣

張哥說技術發表於2023-11-07

來源:程式新視界

最近幾個月,沒事喜歡看看老外寫的技術文章,發現他們的一些思考維度真的有些不太一樣。當然,他們寫的文章大多數沒有國內的那麼卷。

今天這篇文章是關於Go語言中介面設計的一些最佳實踐,與Java等語言不盡相似,但又帶著Go語言的特色,可以對照學習,擴充程式設計思想層面的認知面。

以下是在Go中使用介面的一些最佳實踐:

1、優先小介面:介面是Go中的強大工具,但要保持它們小巧並專注於特定任務。這樣有助於提高可讀性、可維護性,並減少耦合。

2、避免型別切換:型別切換會增加程式碼的複雜度且難以維護,要優先使用小巧且專注的介面,而不是型別切換。

3、使用介面進行模擬測試:介面是進行模擬測試的好工具,因為它們允許將真實實現替換為用於測試目的的模擬實現。

4、使用組合:使用組合來實現多個介面,而不是將一個介面嵌入到另一個介面中。這有助於提高可維護性並減少耦合。

PS:在Go中,組合的使用非常普遍,透過組合可以實現結構體(對照Java類)的繼承關係,而介面的組合同樣可對照Java介面的繼承關係。

5、選擇正確的抽象級別:在定義介面時,請考慮抽象級別,並確保介面既不太具體也不太通用(泛化)。

6、避免空介面:空介面沒有方法,可以接受任何型別,因此除非確實需要它們提供的靈活性,否則請避免使用。

PS:空介面的存在,與Java中Object的存在位置型別,當引數定義為空介面時,可接收任何引數。就好像你把引數定義為Object一樣。

7、使用型別斷言:型別斷言用於斷言介面值的底層型別,但應謹慎使用,因為如果型別斷言不正確,它們可能會導致恐慌(panic)。

PS:panic經常被翻譯為恐慌。在Golang中,panic是一種表示嚴重錯誤的異常情況。當程式遇到無法處理的錯誤時,它會引發panic,並中斷當前的執行流程。panic類似於Java中的RuntimeException,它們都是屬於執行時異常,並且不需要顯式地在程式碼中宣告或捕獲。

但是,與Java中的受檢異常(Checked Exception)不同,Golang中的panic是一種不可恢復的異常,它會導致程式崩潰並觸發執行堆疊的展開。因此,在Golang中,通常建議使用panic來處理程式無法恢復的錯誤,而不是像Java中那樣使用受檢異常來表示可預期的錯誤情況。

8、完全實現介面:在實現介面時,請確保實現介面中定義的所有方法,否則實現將無法編譯。

9、使用介面宣告行為:Go中的介面用於宣告物件的行為,而不是其實現。使用介面為多種型別定義通用行為。

10、對於具體型別使用型別斷言:在必要時,使用型別斷言訪問介面值的具體型別。

11、使用空介面:空介面(interface {})是一種通用型別,可以容納任何型別的值。謹慎使用它,因為它可能使程式碼更難以理解。

12、避免轉換函式:避免編寫將型別轉換為介面的顯式轉換函式。這通常會導致程式碼可讀性較差且難以維護。

13、使用介面組合:使用介面組合來宣告實現多個介面的型別。當想要將多種行為組合到一個型別中時,這非常有用。

14、避免隱藏依賴:在使用介面時,請注意隱藏依賴。在將其實現為型別之前,要了解介面所需的所有方法集合。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024923/viewspace-2993262/,如需轉載,請註明出處,否則將追究法律責任。

相關文章