Go語言的類型系統(tǒng)兰绣,struct interface func及面向?qū)ο罄斫?/h1>

# 首先雕欺,通過下面的例子對比JAVA的面向?qū)ο蠛虶O的面向?qū)ο?/p>

# 例子分別用JAVA和GO分別實現(xiàn)類型薄腻、接口收捣、方法 進(jìn)行對比

## Java中類型 接口 方法的定義?

```?

### Java接口

interface Person {

void sayHi();

}

### Java類

class Assian implement Person{?

String name;?

public Assian (String name) {?

this.name = name;?

}?

public void sayHi() {?

System.out.println(this.name + "Hello World.");?

}?

}?

### Java子類

class China extends Assian {

}

```?

### Java實例化對象?

```?

China china= new China ("liyang");?

china.sayHi();?

```?

## Go中類的定義?

```?

### Go接口

type Person interface {

sayHi()

### Go內(nèi)嵌類型

type Assian struct {?

name string?

}?

func (assian *Assian) sayHi() {?

fmt.Println(assian.name + " Hello World.")?

}?

### Go外部類型

type China struct {

Assian

}

```?

### Go實例化對象?

```?

var china1= China{name: "liyang"}?

china1.sayHi()?

```

#通過上面的例子,加深對Go語言面向?qū)ο蟮睦斫?/p>

# Go的類型系統(tǒng)總結(jié)

- Go的結(jié)構(gòu)體類型庵楷,類似于java的class罢艾,但Go中的結(jié)構(gòu)體是不能定義方法的,只能是變量尽纽,這點和Java不一樣的咐蚯,如果要訪問結(jié)構(gòu)體內(nèi)的成員變量,通過.操作符即可弄贿;

- Go的方法func是給struct添加的新行為仓蛆,定義方式是在func和方法名之間增加一個參數(shù);而Java的方法定義在class內(nèi)部挎春;

- Go可以對包中的 任意 類型定義任意方法,而不僅僅是針對結(jié)構(gòu)體豆拨,但不能對來自其他包的類型或基礎(chǔ)類型定義方法直奋;

- Go中,函數(shù)和方法是不一樣的施禾,我們一般稱包級別的(直接可以通過包調(diào)用的)稱之為函數(shù)脚线,比如fmt.Println();把和一個類型關(guān)聯(lián)起來的函數(shù)稱之為方法弥搞,關(guān)聯(lián)類型的函數(shù)邮绿,只能聲明了類型的實例后才可以調(diào)用,稱之為方法攀例。

- 在func關(guān)鍵字后要執(zhí)行該方法的接收者船逮,這個方法就是屬于這個接收者,接收者分為值接收者和指針接收者粤铭,需要使用指針接收者的有兩個場景挖胃,首先避免在每個方法調(diào)用中拷貝值(如果值類型是大的結(jié)構(gòu)體的話會更有效率);其次,方法可以修改接收者指向的值酱鸭。

- Go的func支持多值返回吗垮。如果有個返回值,我們用不到凹髓,不想浪費一個變量接收怎么辦烁登?這時候可以使用空標(biāo)志符_,這是JAVA不支持的。

- Go的指針和C中的聲明定義是一樣的,此處不贅述塘装,其作用類似于Java引用變量效果匾委。

- Go使用嵌入結(jié)構(gòu)體實現(xiàn)類似于Java的繼承功能,但這屬于一種組合的方式秉氧,我們可以把簡單的對象組合成復(fù)雜的對象,并且他們之間沒有強約束關(guān)系,Go倡導(dǎo)的是組合锁右,而不是繼承、多態(tài)讶泰。

- Go的接口和Java類似咏瑟,不過它不需要強制實現(xiàn),在Go中痪署,如果你這個類型(基本類型码泞,結(jié)構(gòu)體等都可以)擁有了接口的所有方法,那么就默認(rèn)為這個類型實現(xiàn)了這個接口狼犯,是隱式的余寥,不需要和java一樣,強制使用implement強制實現(xiàn)悯森。這種隱式接口方式宋舷,解藕了實現(xiàn)接口的包和定義接口的包:互不依賴。

- Go常用內(nèi)建接口有:error瓢姻、stringer祝蝠、reader、writer等等幻碱。我將在單獨的文章中總結(jié)绎狭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市褥傍,隨后出現(xiàn)的幾起案子儡嘶,更是在濱河造成了極大的恐慌,老刑警劉巖恍风,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件社付,死亡現(xiàn)場離奇詭異承疲,居然都是意外死亡,警方通過查閱死者的電腦和手機鸥咖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門燕鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啼辣,你說我怎么就攤上這事啊研。” “怎么了鸥拧?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵党远,是天一觀的道長。 經(jīng)常有香客問我富弦,道長沟娱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任腕柜,我火速辦了婚禮济似,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盏缤。我一直安慰自己砰蠢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布唉铜。 她就那樣靜靜地躺著台舱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潭流。 梳的紋絲不亂的頭發(fā)上竞惋,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音灰嫉,去河邊找鬼碰声。 笑死,一個胖子當(dāng)著我的面吹牛熬甫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓罚,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼椿肩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豺谈?” 一聲冷哼從身側(cè)響起郑象,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茬末,沒想到半個月后厂榛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盖矫,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年击奶,在試婚紗的時候發(fā)現(xiàn)自己被綠了辈双。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柜砾,死狀恐怖湃望,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痰驱,我是刑警寧澤证芭,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站担映,受9級特大地震影響废士,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝇完,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一官硝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧四敞,春花似錦泛源、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铺厨,卻和暖如春缎玫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背解滓。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工赃磨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洼裤。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓邻辉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腮鞍。 傳聞我的和親對象是個殘疾皇子值骇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容