1. 程式人生 > 其它 >Go語言淺嘗之方法

Go語言淺嘗之方法

Hello,各位小夥伴大家好,我是小棧君,因為疫情的緣故,所以今年過了一個非同尋常的年,在這裡小棧君也是衷心的希望大家清洗手,多通風,出門記得戴口罩,人多別去湊熱鬧。

安全衛生從你我做起,最重要的是即使呆在家裡辦公也別忘了學習哦~

今天我們繼續go語言系列分享之方法,對於方法的介紹,相信做過程式設計的小夥伴或多或少都有了解。

概念

在golang中的方法是作用在特定型別的變數上,因此自定義型別都是可以有方法的,不僅僅只有一個struct 結構體。

方法和函式的區別

但是這裡方法和我們之前介紹的函式有什麼區別呢?

大致小棧君為大家講解一下,在函式中並沒有物件的概念,因此我們對面向物件的函式叫做方法,但是他們本質上都是function,只是函式並不屬於任何一個物件,因此只要符合條件的引數都是可以呼叫函式。

但是並不適用於方法。因為方法僅限於某一個物件,在後面小棧君會給大家進行例項舉例說明。

格式

針對於Go語言中的方法的格式如下:func (receive type) methodName(args ) (返回引數){}

就拿我們之前講過的一個例子而言,我們定義的一個car 和一個smallCar 結構體,其中SmallCar繼承了Car的屬性,理所應當的也繼承了相應的方法。

但是小夥伴請注意,我們在定義方法的時候限定了Car,也就是說這一個Run方法除了賣手機遊戲地圖Car和繼承Car的子類,其他物件是無法使用的。如果強行使用編譯器會直接報錯,具體例子如圖所示:

特別注意的一點是,在Go語言中依舊要區分值傳遞和引用傳遞,如下圖所示:

也就是說在方法中也是區分了這個差別,如果稍微不注意,對於新手的小夥伴來講很有可能會導致排查半天的問題而不得解。

同樣的是方法也是遵循大小寫的區別,小寫的作用域只限於當前的檔案中,對於其他外部需要呼叫的方法我們統一會進行首字母大寫處理。這也算是Go語言的一個規範,小棧君也是多次說過這個問題,希望小夥伴注意一下這個問題。

繼承

同樣類似於結構體中的繼承,方法也是同樣可以繼承的,就如上圖所示,我們的SmallCar繼承了Car的相關屬性,同樣SmallCar也同樣擁有Car所特有的方法。

組合和匿名欄位

如果一個struct嵌套了另一個匿名結構體,那麼這個結構體可以直接訪問匿名結構體的方法從而實現繼承,如果一個結構體嵌套了多個匿名結構體。

那麼這個結構體可以直接訪問多個匿名結構體的方法,從而實現多重繼承,當然在真實的專案當中並不推薦多重繼承。

如果發現問題這會導致程式碼的排查複雜性和程式碼的可讀性變差。

好了,今天的分享就到這裡,我們下期再見,如果你喜歡我的分享,可以進行轉發,點贊或是分享給身邊的朋友。武漢加油,中國加油~ 我是小棧君,我們下期再見,拜了個拜。