国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

深入理解GO語言的面向對象

2020-04-01 19:08:16
字體:
來源:轉載
供稿:網友

前言

有過C++語言學習經歷的朋友都知道,面向對象主要包括了三個基本特征:封裝、繼承和多態。封裝,就是指運行的數據和函數綁定在一起,C++中主要是通過this指針來完成的;繼承,就是指class之間可以相互繼承屬性和函數;多態,主要就是用統一的接口來處理通用的邏輯,每個class只需要按照接口實現自己的回調函數就可以了。

作為集大成者的Go語言,自然不會在面向對象上面無所作為。相比較C++、Java、C#等面向對象語言而言,它的面向對象更簡單,也更容易理解。

go語言中并沒有像C++,Java語言中這類的Class,它只含有像C語言中的結構體,用結構體和指針等特性,完成一個類的作用,很巧妙的使用了指針和結構體,不僅是go的面向對象,包括go語言中的map等操作都是借助了結構體。其實,說白了,C++、Java等面向對象的語言中,類的底層實現就是結構體,對象的引用就是指針,只是語言把他們封裝起來了而已。然而這使得很多人剛接觸面向對象的時候很不理解這些東西。

下面,說所面向對象在go中的寫法:

如果我們要再Java中定義一個Rect,可以求其面積,我們應該這么寫

public class Rect { public int x; public int y; public int Area() { return x*y; }}

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

type Rect struct { x, y int}

這是一個Rect的結構體,那么一個類中,不僅要存在變量,還要有成員函數,那么go的成員函數是這么寫的:

func (r *Rect) Area() int { return r.x*r.y}

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

go語言提供了很多方式:

rect :=new(Rect)rect :=&Rect{}rect :=&Rect{1,2}rect :=&Rect{x:3,y:4}

那么,一遍情況下,如果沒有指定成員變量的大小,go語言會默認初始化成員變量為0,bool類型的為false

那么,構造函數呢?

我們可以這么來寫:

func NewRect(x,y int) *Rect { return &Rect{x,y}}

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

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

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

fmt.Println("hello world")

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

總結

以上就是GO語言面向對象的全部內容,希望這篇文章的內容對大家學習或者使用GO語言能有所幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日土县| 镇平县| 吴旗县| 商丘市| 县级市| 乌拉特前旗| 德江县| 泰顺县| 福泉市| 若尔盖县| 多伦县| 苍山县| 上林县| 夹江县| 邵东县| 获嘉县| 无为县| 兴文县| 新晃| 云阳县| 左权县| 北流市| 昭觉县| 遵义县| 西畴县| 彭水| 东海县| 襄樊市| 古浪县| 汉沽区| 扬州市| 乌拉特中旗| 连州市| 台州市| 太仆寺旗| 商南县| 西昌市| 田林县| 衡东县| 高安市| 新和县|