Fourth glance in Go

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

在Go裡面的結構體和方法是很有意思的內容。它即和OO有點像,但又不完全一樣。為什麼這麼說呢?當你把結構體映射為OO裡面的類的時候,你給結構體添加方法,你就會發現其實方法與結構體並沒有嚴格意義上的關係。在Go裡面,方法是綁定到接受者上的。什麼是接受者?一個對象,這個對象可以是任何類型,int,string, struct, interface ...。

func (t *Type) method_name(parameters) return type

但是同名的方法,在同一個類型上只能出現一次。而且該類型必須與方法在同一個包中。

另外一點是內嵌結構體的問題,方法是可以被繼承的。也就是說一個結構體被內嵌到另一個結構體中,那麼父結構體也就具有了內嵌結構體的方法

>>person.go-------------------------------------------package persontype Person struct {    firstName string    lastName  string}type BlackMan struct {    Person    color string}func (p *Person) FirstName() string {    return p.firstName}func (p *Person) SetFirstName(newName string) {    p.firstName = newName}>>main.go--------------------------------------------------package mainimport (    "./person"    "fmt")func main() {    p := new(person.BlackMan)    p.SetFirstName("Ace")    fmt.Println(p.FirstName())}

 一張圖說明OO裡面的繼承體系與Go裡面的繼承體系區別

 

發現一個奇怪的問題:使用相同的方法去分配記憶體,得出的結果卻截然不同

func main() {    var n [1024 * 1024 * 1024]int    n[0] = 1    m := new(runtime.MemStats)    runtime.ReadMemStats(m)    fmt.Printf("%d\n", m.Alloc/1024)}

這樣程式的輸出是佔用8G空間,如果是1024 * 1024,輸出則是 36K的空間佔用。為什嗎?

 

Go中介面的指標方法和值方法的區別:

Pointer methods can be called with pointers.
• Value methods can be called with values.
• Value-receiver methods can be called with pointer values because they can be dereferenced
first.
• Pointer-receiver methods cannot be called with values, however, because the value stored
inside an interface has no address.

 

Go的物件導向總結

在Go裡面是沒有類的概念的,類型和方法是松耦合的,通過介面讓他們連結在一起。

OO裡面三個重要的概念:封裝,繼承和多態,在Go裡面是這樣對應的

封裝(資料隱藏):其他的OO語言有4個存取層級,在Go裡面只有2種

1. 包級:對象在整個包的範圍內可見,以小寫字母開頭

2. 被匯出:對象在包外可見,以大寫字母開頭

一個類型可以只有方法定義在它的包裡。

繼承:通過內嵌的一個或多個類型來達到多繼承的目的

多態:介面,一個類型變數可以被分配給它的任意介面實現的執行個體。類型和介面是松耦合的, 多繼承可以通過實現多個介面來完成。Go的介面不是Java或C#介面的變體, 它們更加的獨立並且是大規模編程,魯棒性和演變設計的關鍵

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.