這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
類型系統
Go並沒有Java語言那樣的物件導向的思想和體系。更多的是類型,結構。每一種結構都是一個類型。對每一個結構來說,又可以分成兩種類型,原來的值語義上的結構類型、以及這種結構的指標類型。
可以為結構類型添加方法。例子如下:
type Integer intfunc (a Integer) Less(b Integer) bool { return a < b}
func (a *Integer) Add(b Integer) bool { return *a + b}
結構的初始化:
rect1 := new(Rect)
rect2 := &Rect{}
recct3 := &Rect{0, 0, 100}
注意:未顯式初始化的變數都被初始化給結構類型的零值。
因為類型就是簡單的結構體,所以類型並沒有所謂的建構函式和解構函式。直接使用關鍵字 new 來建立類型結構體並返回指標。或者,建立函數來來完成結構體類型的建立。
匿名組合:
因為沒有Java語言那樣的類型系統和物件導向的概念,Go使用匿名組合、interface來完成類似的功能。記住,就是組合、組合、組合。
可見度:
Go中的可見度,簡單分兩種:僅包內可見;包內包外都可見;不管常量、變數、結構體、函數只要首字母小寫就僅包內可見;大寫都可見。
介面:
Go語言的interface並不是Java中介面的概念。
感覺Go語言中的介面存在著不少坑。。。
可以把Go語言中的介面,看成是某種結構體;這種結構體包含的成員只能是函數指標;
介面查詢: file2, ok := file1.(two.IStream)
類型查詢:v1.(type)
介面組合:
type ReadWriter interface {
Reader
Writer
}
任意類型:interface {};注意這裡interface的概念和上面介面定義的概念不一樣。這裡表示的是任意類型。由於Go中即沒有泛型也米有Java中Object那樣的基底類型。所以想要表示任意類型就靠 interface{} 表示。但和定義介面不是一個概念。