go編程基礎(chǔ)視頻筆記-函數(shù)/defer/結(jié)構(gòu)/方法/接口/反射

函數(shù)function

go函數(shù)不支持嵌套歼捐、重載和默認(rèn)參數(shù)
但支持以下特性:
無(wú)需聲明原型、不定長(zhǎng)度變參晨汹、多返回值豹储、命名返回值參數(shù)、匿名函數(shù)淘这、閉包
定義函數(shù)使用關(guān)鍵字func剥扣,且左大括號(hào)不能另起一行
函數(shù)也可以作為一種類型使用

defer

執(zhí)行方式類似其他語(yǔ)言的析構(gòu)函數(shù),在函數(shù)體執(zhí)行結(jié)束后按照調(diào)用順序的相反順序逐個(gè)執(zhí)行
即使函數(shù)發(fā)生嚴(yán)重錯(cuò)誤也會(huì)執(zhí)行
支持匿名函數(shù)的調(diào)用
常用于資源清理铝穷、文件關(guān)閉钠怯、解鎖以及記錄時(shí)間等操作
通過(guò)與匿名函數(shù)配合可在return之后修改函數(shù)計(jì)算結(jié)果
如果函數(shù)體內(nèi)某個(gè)變量作為defer時(shí)匿名函數(shù)的參數(shù),則在定義defer時(shí)即已經(jīng)獲得了拷貝氧骤,否則這是引用某個(gè)變量的地址
go沒(méi)有異常機(jī)制呻疹,但有panic和recover模式來(lái)處理錯(cuò)誤
panic可以在任何地方引發(fā),但recover只有在defer調(diào)用的函數(shù)中有效

結(jié)構(gòu)struct

go中的struct與c中struct非常相似筹陵,并且go沒(méi)有class
使用type <Name> struct{}定義結(jié)構(gòu)刽锤,名稱遵循可見(jiàn)性
支持指向自身的指針類型成員
支持匿名結(jié)構(gòu),可用作成員或定義成員變量
匿名結(jié)構(gòu)也可以用于map的值
可以使用字面值對(duì)結(jié)構(gòu)進(jìn)行初始化
允許直接通過(guò)指針來(lái)讀寫(xiě)結(jié)構(gòu)成員
相同類型的成員可進(jìn)行直接拷貝賦值
支持==與朦佩!=比較運(yùn)算符并思,但不支持>或<
支持匿名字段,本質(zhì)上時(shí)定義了以某個(gè)類型名為名稱的字段
嵌入結(jié)構(gòu)作為匿名字段看起來(lái)像繼承语稠,但不是繼承
可以使用匿名字段指針

方法method

go中雖沒(méi)有class宋彼,但依舊有method
通過(guò)顯示說(shuō)明receiver來(lái)實(shí)現(xiàn)與某個(gè)類型的組合
只能為同一個(gè)包中的類型定義方法
receiver可以是類型的值或者指針
不存在方法重載
可以使用值或指針來(lái)調(diào)用方法,編譯器會(huì)自動(dòng)完成轉(zhuǎn)換
從某種意義上來(lái)說(shuō)仙畦,方法是函數(shù)的語(yǔ)法糖
因?yàn)閞eceiver其實(shí)就是方法所接受的第一個(gè)參數(shù)(Method Value vs. Method Expression)
如果外部結(jié)構(gòu)和嵌入結(jié)構(gòu)存在同名方法输涕,則優(yōu)先調(diào)用外部結(jié)構(gòu)的方法
類型別名不會(huì)擁有底層類型所附帶的方法
方法可以調(diào)用結(jié)構(gòu)中的非公開(kāi)字段

接口interface

接口是一個(gè)或多個(gè)方法簽名的集合
只要某個(gè)類型擁有該接口所有方法簽名,即算實(shí)現(xiàn)該接口
無(wú)需顯示聲明實(shí)現(xiàn)了哪個(gè)接口慨畸,這稱為Structural Typing
接口只有方法聲明莱坎,沒(méi)有實(shí)現(xiàn),沒(méi)有數(shù)據(jù)字段
接口可以匿名嵌入其他接口寸士,或嵌入結(jié)構(gòu)中
將對(duì)象賦值給接口時(shí)檐什,會(huì)發(fā)生拷貝
而接口內(nèi)部存儲(chǔ)的時(shí)指向這個(gè)復(fù)制品的指針,即無(wú)法修改復(fù)制品的狀態(tài)弱卡,也無(wú)法獲取指針
只有當(dāng)接口存儲(chǔ)的類型和對(duì)象都為nil時(shí)乃正,接口才等于nil
接口調(diào)用不會(huì)做receiver的自動(dòng)轉(zhuǎn)換
接口同樣支持匿名字段方法
接口也可以實(shí)現(xiàn)類似OOP中的多態(tài)
空接口可以作為任何類型數(shù)據(jù)的容器

反射reflection

反射可大大提高程序的靈活性,使得interface{}有更大的發(fā)揮余地
反射使用TypeOf和ValueOf函數(shù)從接口中獲取目標(biāo)對(duì)象信息
反射會(huì)將匿名字段作為獨(dú)立字段(匿名字段本質(zhì))
想要利用反射修改對(duì)象狀態(tài)婶博,前提是interface.data是settable瓮具,即pointer-interface
通過(guò)反射可以“動(dòng)態(tài)”調(diào)用方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搭综,更是在濱河造成了極大的恐慌垢箕,老刑警劉巖划栓,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兑巾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡忠荞,警方通過(guò)查閱死者的電腦和手機(jī)蒋歌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)委煤,“玉大人堂油,你說(shuō)我怎么就攤上這事”探剩” “怎么了府框?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)讥邻。 經(jīng)常有香客問(wèn)我迫靖,道長(zhǎng),這世上最難降的妖魔是什么兴使? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任系宜,我火速辦了婚禮,結(jié)果婚禮上发魄,老公的妹妹穿的比我還像新娘盹牧。我一直安慰自己,他們只是感情好励幼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布汰寓。 她就那樣靜靜地躺著,像睡著了一般苹粟。 火紅的嫁衣襯著肌膚如雪有滑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天六水,我揣著相機(jī)與錄音俺孙,去河邊找鬼。 笑死掷贾,一個(gè)胖子當(dāng)著我的面吹牛睛榄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播想帅,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼场靴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旨剥,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咧欣,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后轨帜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體魄咕,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年蚌父,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哮兰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苟弛,死狀恐怖喝滞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膏秫,我是刑警寧澤右遭,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站缤削,受9級(jí)特大地震影響窘哈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僻他,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一宵距、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吨拗,春花似錦满哪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至娇妓,卻和暖如春像鸡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哈恰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工只估, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人着绷。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓蛔钙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親荠医。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吁脱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • Go語(yǔ)言做Web編程非常方便桑涎,并且在開(kāi)發(fā)效率和程序運(yùn)行效率方面都非常優(yōu)秀。相比于Java兼贡,其最大的優(yōu)勢(shì)就是簡(jiǎn)便易用...
    暗黑破壞球嘿哈閱讀 8,995評(píng)論 6 67
  • 前言 人生苦多攻冷,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin遍希! 什么是Kotlin等曼? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,163評(píng)論 9 118
  • 一:java概述:1,JDK:Java Development Kit孵班,java的開(kāi)發(fā)和運(yùn)行環(huán)境涉兽,java的開(kāi)發(fā)工...
    ZaneInTheSun閱讀 2,635評(píng)論 0 11
  • 當(dāng)群里在說(shuō)起今天已是畢營(yíng)前一天,突然覺(jué)得有點(diǎn)心慌慌——70天就要過(guò)去了嗎篙程?原以為70天會(huì)很長(zhǎng),我會(huì)很艱難别厘,到今天卻...
    獅子座秋秋閱讀 159評(píng)論 0 1
  • 小五第一次注意到大炎是在拿著聽(tīng)力試卷匆忙進(jìn)教室怕誤了早讀的時(shí)候虱饿。大炎縮在教室后面角落,認(rèn)真又嚴(yán)肅的讀著英語(yǔ)必修課本...
    羌小六閱讀 285評(píng)論 0 0