老外總結的14條Go介面最佳實踐,有些不一樣
來源:程式新視界
最近幾個月,沒事喜歡看看老外寫的技術文章,發現他們的一些思考維度真的有些不太一樣。當然,他們寫的文章大多數沒有國內的那麼卷。
今天這篇文章是關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Go 語言 12 條最佳實踐Go
- 30 多年的編碼經驗總結成 10 條最佳實踐
- 老外的EXP&IMP總結
- Oracle高可用最佳實踐總結Oracle
- Web最佳實踐閱讀總結(1)Web
- Web最佳實踐閱讀總結(2)Web
- 關於 JS 模組化的最佳實踐總結JS
- 2019 總結不一樣!
- Go HttpServer 最佳實踐GoHTTPServer
- 介面最佳化的常見方案實戰總結
- python編碼最佳實踐之總結Python
- Google:12 條 Golang 最佳實踐Golang
- Apache Airflow十條最佳實踐ApacheAI
- go專案dockerfile最佳實踐GoDocker
- go 程式設計師的最佳實踐Go程式設計師
- 什麼是框架?(最佳實踐、專案總結)框架
- 17 條 Swift 最佳實踐規範Swift
- 給JavaScript初學者的24條最佳實踐JavaScript
- Mybatis plus通用欄位自動填充的最佳實踐總結MyBatis
- C/C++關於結構的緊湊填充的幾條最佳實踐C++
- 微服務架構十條最佳實踐微服務架構
- 【GoLang】golang 最佳實踐彙總Golang
- 值得學習總結的網頁導航設計最佳實踐網頁
- RxJava 與 Retrofit 結合的最佳實踐RxJava
- 【譯】jQuery事件繫結的最佳實踐jQuery事件
- Java最佳實踐小結 - jonathangilesJava
- Gulp 結構化最佳實踐
- 今日頭條Go建千億級微服務的實踐Go微服務
- 頂級程式設計師的10條最佳實踐程式設計師
- Spring Boot 編寫 API 的 10條最佳實踐Spring BootAPI
- Go單體服務開發最佳實踐Go
- go-zero解讀與最佳實踐(上)Go
- Go 單體服務開發最佳實踐Go
- Vue開發總結 及 一些最佳實踐 (已更新)Vue
- 連線條件字元型別不一樣。字元型別
- 編碼最佳實踐——介面分離原則
- RESTful API實踐總結RESTAPI
- hadoop實踐總結Hadoop