GO語言使用之物件導向程式設計 3 方法

2021-08-22 19:46:39 字數 2363 閱讀 8554

在某些情況下,我們要需要宣告(定義)方法。比如person結構體:除了有一些欄位外( 年齡,姓名..),person結構體還有一些行為比如:可以說話、跑步..,通過學習,還可以做算術題。這時就要用方法才能完成。

golang中的方法是作用在指定的資料型別上的(即:和指定的資料型別繫結),因此自定義型別,都可以有方法,而不僅僅是struct

1、語法

func (recevier type) methodname(引數列表) (返回值列表)

2、引數說明:

1) 引數列表:表示方法輸入

2) recevier type : 表示這個方法和type這個型別進行繫結,或者說該方法作用於type型別

3) receiver type : type可以是結構體,也可以其它的自定義型別

4) receiver : 就是type型別的乙個變數(例項),比如 :person結構體 的乙個變數(例項)

5) 返回值列表:表示返回的值,可以多個

6) 方法主體:表示為了實現某一功能**塊

7) return 語句不是必須的。

3、案列**:

type a struct 

func (a a) test()

func structmethoddemo4()

案例**說明:

1) type a struct :說明a是乙個結構體

2) func (a a) test() : 說明 test() 是乙個方法, 和 a 結構體型別繫結/關聯/ test方法作用在a結構體

三、快速入門的案列

/*結構體方法*/

type d struct

func (a d) test()

func structmethoddemo4()

四、方法的呼叫和傳參機制原理:(重要!)方法的呼叫和傳參機制和函式基本一樣,不一樣的地方是方法呼叫時,會將呼叫方法的變數,當做實參也傳遞給方法。

五、方法注意事項和細節討論

1、結構體型別是值型別,在方法呼叫中,遵守值型別的傳遞機制,是值拷貝傳遞方式

2、如程式設計師希望在方法中,修改結構體變數的值,可以通過結構體指標的方式來處理[案例+示意圖]

type person struct 

//給person關聯乙個方法

//修改結構體變數的值,可以通過結構體指標的方式來處理

func (p *person) test()

//如程式設計師希望在方法中,修改結構體變數的值,可以通過結構體指標的方式來處理

p := person

fmt.printf("main的p的位址=%p\n", &p)

//因為 test() 是和 *person繫結

//標準的呼叫方式

(&p).test()

fmt.printf("p的值=%v\n", p)

3、 golang中的方法作用在指定的資料型別上的(即:和指定的資料型別繫結),因此自定義型別,都可以有方法,而不僅僅是struct, 比如int , float32等都可以有方法[案例]

/*

golang中的方法作用在指定的資料型別上的(即:和指定的資料型別繫結),因此自定義型別,都可以有方法,

而不僅僅是struct, 比如int , float32等都可以有方法

*/type fl float64

func (f fl) test()

func (f *fl) test1()

func structmethoddemo1()

4、方法的訪問範圍控制的規則,和函式一樣。方法名首字母小寫,只能在本包訪問,方法首字母大寫,可以在本包和其它包訪問。

5、 如果乙個型別實現了string() string 這個方法,那麼fmt.println缺省會呼叫這個變數的string()進行輸出。

type car struct 

//關聯乙個方法string方法,直接輸出該結構體變數時,就會自動呼叫該方法.

func (car *car) string() string

//如果乙個型別實現了string() string 這個方法,那麼fmt.println缺省會呼叫這個變數的string()進行輸出

car := car

fmt.println(car)

Go之物件導向程式設計之繼承

golang的繼承與j a和php不太一樣,如php繼承需要用到extends關鍵字,而golang使用的是匿名繼承或有名繼承。二 簡單舉例 package main import fmt type brand struct type goods struct func main 結果 go run...

Go語言 物件導向程式設計

go語言的語言設計非常的簡潔,因為,go語言並沒有物件導向的概念,因此go語言中沒有物件導向的一些概念,例如 封裝 繼承 多型,虛函式 建構函式,this指標等 儘管go語言中沒有封裝 繼承 多型,但同樣也可以實現相應的功能。封裝 通過方法進行實現 繼承 通過匿名字段實現 多型 通過介面實現 方法也...

第十二周部落格之物件導向程式設計3

封裝 封裝有兩方面含義 1.將資料 屬性 和行為 方法 包裝到類物件中。在方法內部對屬性進行操作,在類物件的外部呼叫方法。這樣,無需關心方法內部的具體實現細節,從而隔離了複雜度。2.在類物件內部通過訪問控制把某些屬性和方法隱藏起來,不允許在類物件外部直接訪問,而是在類物件的內部對外提供公開的介面方法...