Go 語言程序設(shè)計(jì)——面向?qū)ο缶幊蹋?)

  • Go 語言的面向?qū)ο缶幊谭绞脚c傳統(tǒng)的 C++抬纸、Java睡陪、Python 等語言不同
  • Go 語言的標(biāo)準(zhǔn)庫大部分情況下提供的都是函數(shù)包,但也適當(dāng)?shù)靥峁┝税椒ǖ淖远x類型

幾個關(guān)鍵概念

  • Go 語言不支持繼承
  • Go 語言只支持聚合(也叫做組合)和嵌入,例子:
type ColoredPoint struct {
  color.Color // 匿名字段(嵌入)
  x, y    int // 具名字段(聚合)
}
  • 術(shù)語“類”(class)厌丑、“對象”(object)、以及“實(shí)例”(instance)在傳統(tǒng)的多層次繼承式面向?qū)ο缶幊讨幸约岸x的非常清晰渔呵,但在 Go 語言中我們完全避開使用它們
  • 由于沒有繼承怒竿,因此也就沒有虛函數(shù),Go 語言對此的支持是采用類型安全的鴨子類型(duck type)
  • 參數(shù)可以被聲明為一個具體的類型(例如扩氢,int耕驰、string 或者 *os.File 以及 MyType),也可以是接口(interface)录豺,既提供了具有滿足該接口的方法的值
  • 繼承的一個優(yōu)點(diǎn)是朦肘,有些方法只需在基類中實(shí)現(xiàn)一次,即可在子類中方便地使用巩检,Go 語言為此提供了兩種解決方法:
    • 一種方法是嵌入厚骗,如果嵌入了一個類型,方法只需在所嵌入的類型中實(shí)現(xiàn)一次兢哭,即可在所有包含該嵌入類型的類型中使用
    • 為每一種類型提供獨(dú)立的方法领舰,但是只是簡單地將包裝(通常都只有一行)了功能性作用的代碼放進(jìn)了一個函數(shù),然后將所有類的方法都調(diào)用這個函數(shù)
  • Go 語言面向?qū)ο缶幊讨械牧硪粋€與眾不同點(diǎn)是它的接口迟螺、值和方法都相互保持獨(dú)立
  • 接口用于聲明方法簽名冲秽,結(jié)構(gòu)體用于聲明聚合或者嵌入的值,而方法用于聲明在自定義類型(通常為結(jié)構(gòu)體)上的操作

自定義類型

  • 自定義類型的語法:
type typeName typeSpecification
  • typeName 可以是一個包或者函數(shù)內(nèi)唯一的任何合法的 Go 標(biāo)識符
  • typeSpecification 可以是任何內(nèi)置的類型(如 string矩父、int锉桑、切片映射 或者 通道)窍株、一個接口民轴、一個結(jié)構(gòu)體或者一個函數(shù)簽名
  • 下面是沒有方法的自定義類型例子:
type Count int
type StringMap map[string] string
type FloatChan chan float64

var i Count = 7
i++
fmt.Println(i)
sm := make(StringMap)
sm["key1"] = "value1"
sm["key2"] = "value2"
fmt.Println(sm)
fc := make(FloatChan, 1)
fc <- 2.29558714939
fmt.Println(<-fc)
  • CountStringMap球订、FloatChan 這樣的類型后裸,他們是直接基于內(nèi)置類型創(chuàng)建的,硬扯可以拿來當(dāng)做內(nèi)置類型一樣使用
  • 如果要將其傳遞給一個接受其底層類型的函數(shù)冒滩,就必須先將其轉(zhuǎn)換成底層類型(無需成本微驶,因?yàn)槭窃诰幾g時完成)
  • 我們也可能需要進(jìn)行相反的操作,建一個內(nèi)置類型的值升級成一個自定義類型的值,以使用其自定義類型的方法因苹,例子:
type RuneForRuneFunc func(rune) rune
var removePunctuation RuneForRuneFunc
phrases := []string{"Day; dusk, and night.", "All day long"}
removePunctuation = func(char rune) rune {
  if unicode.Is(unicode.Terminal_punctuation, char) {
    return -1
  }
  return char
}
processPhrases(phrases, removePunctuation)
func processPhrases(phrases []string, function removePunctuation) {
  for _, phrase := range phrases {
    fmt.Println(strings.Map(function, phrase))
  }
}
  • 基于內(nèi)置類型或者函數(shù)簽名創(chuàng)建自定義的類型非常有用苟耻,但對我們來說遠(yuǎn)遠(yuǎn)不夠
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扶檐,隨后出現(xiàn)的幾起案子凶杖,更是在濱河造成了極大的恐慌,老刑警劉巖蘸秘,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件官卡,死亡現(xiàn)場離奇詭異,居然都是意外死亡醋虏,警方通過查閱死者的電腦和手機(jī)寻咒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颈嚼,“玉大人毛秘,你說我怎么就攤上這事∽杩危” “怎么了叫挟?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長限煞。 經(jīng)常有香客問我抹恳,道長,這世上最難降的妖魔是什么署驻? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任奋献,我火速辦了婚禮,結(jié)果婚禮上旺上,老公的妹妹穿的比我還像新娘瓶蚂。我一直安慰自己,他們只是感情好宣吱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布窃这。 她就那樣靜靜地躺著,像睡著了一般征候。 火紅的嫁衣襯著肌膚如雪杭攻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天疤坝,我揣著相機(jī)與錄音兆解,去河邊找鬼。 笑死卒煞,一個胖子當(dāng)著我的面吹牛痪宰,可吹牛的內(nèi)容都是我干的叼架。 我是一名探鬼主播畔裕,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼衣撬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扮饶?” 一聲冷哼從身側(cè)響起具练,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甜无,沒想到半個月后扛点,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岂丘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年陵究,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奥帘。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡铜邮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寨蹋,到底是詐尸還是另有隱情松蒜,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布已旧,位于F島的核電站秸苗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏运褪。R本人自食惡果不足惜惊楼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吐句。 院中可真熱鬧胁后,春花似錦、人聲如沸嗦枢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽文虏。三九已至侣诺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氧秘,已是汗流浹背年鸳。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丸相,地道東北人搔确。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親膳算。 傳聞我的和親對象是個殘疾皇子座硕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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