溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何分析Go語(yǔ)言中的方法

發(fā)布時(shí)間:2022-01-17 17:59:10 來(lái)源:億速云 閱讀:140 作者:柒染 欄目:數(shù)據(jù)庫(kù)

如何分析Go語(yǔ)言中的方法,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

概念

在golang中的方法是作用在特定類型的變量上,因此自定義類型都是可以有方法的,不僅僅只有一個(gè)struct 結(jié)構(gòu)體。

方法和函數(shù)的區(qū)別

但是這里方法和我們之前介紹的函數(shù)有什么區(qū)別呢?

大致小棧君為大家講解一下,在函數(shù)中并沒(méi)有對(duì)象的概念,因此我們對(duì)面向?qū)ο蟮暮瘮?shù)叫做方法,但是他們本質(zhì)上都是function,只是函數(shù)并不屬于任何一個(gè)對(duì)象,因此只要符合條件的參數(shù)都是可以調(diào)用函數(shù)。

但是并不適用于方法。因?yàn)榉椒▋H限于某一個(gè)對(duì)象,在后面小棧君會(huì)給大家進(jìn)行實(shí)例舉例說(shuō)明。

格式

針對(duì)于Go語(yǔ)言中的方法的格式如下:

func (receive  type) methodName(args ) (返回參數(shù)){}

就拿我們之前講過(guò)的一個(gè)例子而言,我們定義的一個(gè)car 和一個(gè)smallCar 結(jié)構(gòu)體,其中SmallCar繼承了Car的屬性,理所應(yīng)當(dāng)?shù)囊怖^承了相應(yīng)的方法。

但是小伙伴請(qǐng)注意,我們?cè)诙x方法的時(shí)候限定了Car,也就是說(shuō)這一個(gè)Run方法除了Car和繼承Car的子類,其他對(duì)象是無(wú)法使用的。如果強(qiáng)行使用編譯器會(huì)直接報(bào)錯(cuò),具體例子如圖所示:

特別注意的一點(diǎn)是,在Go語(yǔ)言中依舊要區(qū)分值傳遞和引用傳遞,如下圖所示:

也就是說(shuō)在方法中也是區(qū)分了這個(gè)差別,如果稍微不注意,對(duì)于新手的小伙伴來(lái)講很有可能會(huì)導(dǎo)致排查半天的問(wèn)題而不得解。

同樣的是方法也是遵循大小寫(xiě)的區(qū)別,小寫(xiě)的作用域只限于當(dāng)前的文件中,對(duì)于其他外部需要調(diào)用的方法我們統(tǒng)一會(huì)進(jìn)行首字母大寫(xiě)處理。這也算是Go語(yǔ)言的一個(gè)規(guī)范,小棧君也是多次說(shuō)過(guò)這個(gè)問(wèn)題,希望小伙伴注意一下這個(gè)問(wèn)題。

繼承

同樣類似于結(jié)構(gòu)體中的繼承,方法也是同樣可以繼承的,就如上圖所示,我們的SmallCar繼承了Car的相關(guān)屬性,同樣SmallCar也同樣擁有Car所特有的方法。

組合和匿名字段

如果一個(gè)struct嵌套了另一個(gè)匿名結(jié)構(gòu)體,那么這個(gè)結(jié)構(gòu)體可以直接訪問(wèn)匿名結(jié)構(gòu)體的方法從而實(shí)現(xiàn)繼承,如果一個(gè)結(jié)構(gòu)體嵌套了多個(gè)匿名結(jié)構(gòu)體。

那么這個(gè)結(jié)構(gòu)體可以直接訪問(wèn)多個(gè)匿名結(jié)構(gòu)體的方法,從而實(shí)現(xiàn)多重繼承,當(dāng)然在真實(shí)的項(xiàng)目當(dāng)中并不推薦多重繼承。

如果發(fā)現(xiàn)問(wèn)題這會(huì)導(dǎo)致代碼的排查復(fù)雜性和代碼的可讀性變差。

看完上述內(nèi)容,你們掌握如何分析Go語(yǔ)言中的方法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI