Go語言的類型結構

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

類型系統

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{} 表示。但和定義介面不是一個概念。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.