看到現在,我們已經掌握了幾個基本的觀念,接下來我要談的是Go的設計哲學
因為了解Go的設計哲學,你才知道該怎麼面對這個語言
Gopher喜歡Go的部份原因有哪些
Go 語言的核心團隊明確表示,他們寧可讓語言保持簡單,只包含真正有用且不會造成誤解的特性,而不是嘗試融合各種現代程式語言的特性,Go選擇做減法,選擇了“簡單”,他們把複雜性留給了語言自身的設計以及實現,就是說,複雜的開發Go的團隊已經幫你完成啦,簡單易用的部分留給Gopher們
Go設計者推崇“最小方式”思考方式,即一件事情僅有一種方式或數量盡可能少的方式去完成
我之前是寫ruby,ruby是一個oop語言,也就是代表他有類型系統即繼承系統。
那go呢,go不支持傳統的類繼承,在go語言我們找不到經典的oop語法元素,類型及繼承
那...go豈不是寫什麼都耦合再一起了嗎,不是,go語言遵從的設計哲學也是組合
類型系統:
方法與類型:
接口:
包的結構:
孤島性:Go 的類型(無論是結構體、基本類型或其他)、接口和包,都是設計成獨立的元素。它們本身不直接與其他元素有繼承或隱式的依賴關係。
建立關聯:為了在實際應用中創建有用的程序,我們需要這些獨立元素之間建立某種關聯,或者說是"耦合"。
組合為王:Go 鼓勵使用"組合"(composition)作為建立關聯的主要方式。這與其他語言中的繼承方式形成對比。組合不僅僅是一種選擇,而在 Go 中,它基本上是連接不同元素的唯一方式。
type poolLocal struct {
private interface{}
shared []interface{}
Mutex
pad [128]byte
}
我們在poolLocal加了類型Mutex,被加入的Mutex的方法集合會被加到poolLocal,這種很像oop的繼承,但原理不同,這是一個語法糖,實際上poolLocal與Mutex兩者是互相不知道彼此的存在的,poolLocal會有Mutex的兩個方法,但實際執行這兩個方法時,會透過Mutex的實體來執行
type ReadWriter interface {
Reader
Writer
}
interface是一個分法集合,但實現了與實現者關係是隱式的,他讓程序的耦合度降到最低,同時連接了部分的紐帶,隱式的interface實現了不經意間滿足依賴抽象,接口隔離
Type Embedding(類型嵌入)為類型提供了垂直擴展的能力,而 Interface(接口)則是水平擴展的關鍵
參考書籍:Go語言精進之路