Hello,各位小夥伴你們好,我是小棧君,由於疫情的緣故,因此今年過了一個非同尋常的年,在這裏小棧君也是衷心的但願你們清洗手,多通風,出門記得戴口罩,人多別去湊熱鬧。golang
安全衛生從你我作起,最重要的是即便呆在家裏辦公也別忘了學習哦~編程
今天咱們繼續go語言系列分享之方法,對於方法的介紹,相信作過編程的小夥伴或多或少都有了解。segmentfault
在golang中的方法是做用在特定類型的變量上,所以自定義類型都是能夠有方法的,不單單隻有一個struct 結構體。安全
可是這裏方法和咱們以前介紹的函數有什麼區別呢?函數
大體小棧君爲你們講解一下,在函數中並無對象的概念,所以咱們對面向對象的函數叫作方法,可是他們本質上都是function,只是函數並不屬於任何一個對象,所以只要符合條件的參數都是能夠調用函數。學習
可是並不適用於方法。由於方法僅限於某一個對象,在後面小棧君會給你們進行實例舉例說明。spa
針對於Go語言中的方法的格式以下:
func (receive type) methodName(args ) (返回參數){}3d
就拿咱們以前講過的一個例子而言,咱們定義的一個car 和一個smallCar 結構體,其中SmallCar繼承了Car的屬性,理所應當的也繼承了相應的方法。對象
可是小夥伴請注意,咱們在定義方法的時候限定了Car,也就是說這一個Run方法除了Car和繼承Car的子類,其餘對象是沒法使用的。若是強行使用編譯器會直接報錯,具體例子如圖所示:blog
特別注意的一點是,在Go語言中依舊要區分值傳遞和引用傳遞,以下圖所示:
也就是說在方法中也是區分了這個差異,若是稍微不注意,對於新手的小夥伴來說頗有可能會致使排查半天的問題而不得解。
一樣的是方法也是遵循大小寫的區別,小寫的做用域只限於當前的文件中,對於其餘外部須要調用的方法咱們統一會進行首字母大寫處理。這也算是Go語言的一個規範,小棧君也是屢次說過這個問題,但願小夥伴注意一下這個問題。
一樣相似於結構體中的繼承,方法也是一樣能夠繼承的,就如上圖所示,咱們的SmallCar繼承了Car的相關屬性,一樣SmallCar也一樣擁有Car所特有的方法。
若是一個struct嵌套了另外一個匿名結構體,那麼這個結構體能夠直接訪問匿名結構體的方法從而實現繼承,若是一個結構體嵌套了多個匿名結構體。
那麼這個結構體能夠直接訪問多個匿名結構體的方法,從而實現多重繼承,固然在真實的項目當中並不推薦多重繼承。
若是發現問題這會致使代碼的排查複雜性和代碼的可讀性變差。
好了,今天的分享就到這裏,咱們下期再見,若是你喜歡個人分享,能夠進行轉發,點贊或是分享給身邊的朋友。武漢加油,中國加油~ 我是小棧君,咱們下期再見,拜了個拜。