重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
如何分析Go語言中的方法,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
概念
在golang中的方法是作用在特定類型的變量上,因此自定義類型都是可以有方法的,不僅僅只有一個struct 結(jié)構(gòu)體。
方法和函數(shù)的區(qū)別
但是這里方法和我們之前介紹的函數(shù)有什么區(qū)別呢?
大致小棧君為大家講解一下,在函數(shù)中并沒有對象的概念,因此我們對面向?qū)ο蟮暮瘮?shù)叫做方法,但是他們本質(zhì)上都是function,只是函數(shù)并不屬于任何一個對象,因此只要符合條件的參數(shù)都是可以調(diào)用函數(shù)。
但是并不適用于方法。因為方法僅限于某一個對象,在后面小棧君會給大家進行實例舉例說明。
格式
針對于Go語言中的方法的格式如下:
func (receive type) methodName(args ) (返回參數(shù)){}
就拿我們之前講過的一個例子而言,我們定義的一個car 和一個smallCar 結(jié)構(gòu)體,其中SmallCar繼承了Car的屬性,理所應(yīng)當(dāng)?shù)囊怖^承了相應(yīng)的方法。
但是小伙伴請注意,我們在定義方法的時候限定了Car,也就是說這一個Run方法除了Car和繼承Car的子類,其他對象是無法使用的。如果強行使用編譯器會直接報錯,具體例子如圖所示:
特別注意的一點是,在Go語言中依舊要區(qū)分值傳遞和引用傳遞,如下圖所示:
也就是說在方法中也是區(qū)分了這個差別,如果稍微不注意,對于新手的小伙伴來講很有可能會導(dǎo)致排查半天的問題而不得解。
同樣的是方法也是遵循大小寫的區(qū)別,小寫的作用域只限于當(dāng)前的文件中,對于其他外部需要調(diào)用的方法我們統(tǒng)一會進行首字母大寫處理。這也算是Go語言的一個規(guī)范,小棧君也是多次說過這個問題,希望小伙伴注意一下這個問題。
繼承
同樣類似于結(jié)構(gòu)體中的繼承,方法也是同樣可以繼承的,就如上圖所示,我們的SmallCar繼承了Car的相關(guān)屬性,同樣SmallCar也同樣擁有Car所特有的方法。
組合和匿名字段
如果一個struct嵌套了另一個匿名結(jié)構(gòu)體,那么這個結(jié)構(gòu)體可以直接訪問匿名結(jié)構(gòu)體的方法從而實現(xiàn)繼承,如果一個結(jié)構(gòu)體嵌套了多個匿名結(jié)構(gòu)體。
那么這個結(jié)構(gòu)體可以直接訪問多個匿名結(jié)構(gòu)體的方法,從而實現(xiàn)多重繼承,當(dāng)然在真實的項目當(dāng)中并不推薦多重繼承。
如果發(fā)現(xiàn)問題這會導(dǎo)致代碼的排查復(fù)雜性和代碼的可讀性變差。
看完上述內(nèi)容,你們掌握如何分析Go語言中的方法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!