GO語言物件導向

2022-10-10 16:48:14 字數 1374 閱讀 1791

當初開發go語言的時候就是因為c++的特性太過於繁雜,從而使得很多c++的開發者因為c++的特性而頭疼,go語言成功的精簡了c++的特性,使其很簡潔,很少的特性,卻可以完成很多的事情。

go語言中並沒有像c++,j**a語言中這類的class,它只含有像c語言中的結構體,用結構體和指標等特性,完成乙個類的作用,很巧妙的使用了指標和結構體,不僅是go的物件導向,包括go語言中的map等操作都是借助了結構體。其實,說白了,c++、j**a等物件導向的語言中,類的底層實現就是結構體,物件的引用就是指標,只是語言把他們封裝起來了而已。然而這使得很多人剛接觸物件導向的時候很不理解這些東西。

下面,說所物件導向在go中的寫法:

如果我們要再j**a中定義乙個rect,可以求其面積,我們應該這麼寫

1

public

class

rect

7 }

很簡單,那麼go語言中怎麼做呢?go中並不存在所謂的類,所有的類都是用結構體表示的,所以要寫乙個類,我們先得定義乙個結構體:

1 type rect struct

這是乙個rect的結構體,那麼乙個類中,不僅要存在變數,還要有成員函式,那麼go的成員函式是這麼寫的:

1 func (r *rect) area() int

這個成員函式的功能是求面積的,顯然,這個成員函式值對rect的結構體適用,這樣就實現了所謂的封裝,那麼,我們如何去建立並初始化類的例項呢

go語言提供了很多方式:

1 rect :=new

(rect)

2 rect :=&rect{}

3 rect :=&rect

4 rect :=&rect

那麼,一遍情況下,如果沒有指定成員變數的大小,go語言會預設初始化成員變數為0,bool型別的為false。

那麼,建構函式呢?

我們可以這麼來寫:

1 func newrect(x,y int) *rect 

3 }

其實,這也是我們平時new乙個物件時候的真正操作,只是go把他真正展現給我們了。

看到這裡,我們似乎還有乙個疑問,那就是,像j**a、c++中對於可見性的描述呢,go語言中不存在public等關鍵字,go語言中直接選擇用字母大小寫控制。

乙個變數以大寫字母開頭則表示對其他包可見,如果想要不可見,那麼使用小寫字母即可,但是go語言中的可見性控制只是針對包的,並不針對類,也就是,同乙個包下的類都是可見的。這個時候我們就可以知道了為什麼輸出語句是這樣寫的了吧:

1 fmt.println("

hello world

")

因為此函式對其他包是可見的。

go語言物件導向

go語言可通過struct宣告新的型別 新建乙個型別person type person struct var p1 person p1.name liming p1.age 18新建乙個型別student,可以通過匿名欄位將person所有欄位隱式引入student type student st...

Go語言中物件導向

go語言中沒有明確的oop object oriented programming 概念。go語言只提供了兩個關鍵型別 struct,inte ce。1 struct與c 語言中的普通struct相似,在go語言中是借助著struct結構體才實現的 2 inte ce是抽象類的型別,inte ce則...

Go語言 物件導向程式設計

go語言的語言設計非常的簡潔,因為,go語言並沒有物件導向的概念,因此go語言中沒有物件導向的一些概念,例如 封裝 繼承 多型,虛函式 建構函式,this指標等 儘管go語言中沒有封裝 繼承 多型,但同樣也可以實現相應的功能。封裝 通過方法進行實現 繼承 通過匿名字段實現 多型 通過介面實現 方法也...