深入理解GO語言的物件導向

2022-09-24 21:06:14 字數 1455 閱讀 2210

前言

有過c++語言學習經歷的朋友都知道,物件導向主要包括了三個基本特徵:封裝、繼承和多型。封裝,就是指執行的資料和函式繫結在一起,c++中主要是通過this指標來完成的;繼承,就是指class之間可以相互繼承屬性和函式;多型,主要就是用統一的介面來處理通用的邏輯,每個class只需要按照介面實現自己的**函式就可以了。

作為集大成者的go語言,自然不會在物件導向上面無所作為。相比較c++、j**a、c#等物件導向語言而言,它的物件導向更簡單,也更容易理解。

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

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

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

public class程式設計客棧 rect

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

type rect struct

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

func (r *rect) area() int

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

go語言提供了很多方式:

rect :=new(rect)

rect :=&rect{}

rect :=&rect

rect :=&rect

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

那麼,建構函式呢?

我們可以這麼來寫:

func newrect(x,y int) *rect

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

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

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

fmt.println("hello world")

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

總結本文標題: 深入理解go語言的物件導向

本文位址: /jiaoben/golang/165580.html

php物件導向深入理解(二)

乙個簡單的小程式 配置 config.ini 專案的根目錄 define root f 資料夾的名字 oop 資料庫連線資訊 define db host localhost define db username root define db password root define db name...

深入理解C 物件導向之繼承

繼承是在類之間建立一種相交的關係,使得新定義的派生類的例項可以繼承已有的基類的特徵並且還可以新增新的功能。繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用已存在的類的功能。為了提高軟體模組的可復用性和可擴充性,以便提高軟體的開發效率,我們總是希望能夠利...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...