1. 程式人生 > >Go語言基礎:深入理解 struct 內嵌 inteface

Go語言基礎:深入理解 struct 內嵌 inteface

1. 如何更好的理解匿名介面

// 匿名介面可以被用作變數或者結構屬性型別
type Man struct {
    gender interface {
        GetGender() string
    }
}

上面Man類可以擴充套件成

type gender interface {
        GetGender() string
    }

type Man struct {
    gender//
}

程式碼這樣寫是不是好懂多了。

2. 匿名介面物件使用,為什麼要採用引用的方式?

    // 匿名介面物件的使用
    varMan := Man{&Employee{
        name:   "Nobody"
, age: 20, salary: 10000, gender: "Unknown", }}

原因是匿名介面gender的實現的接收者是一個指標,因此這裡要採用引用的方式賦值。

3. 為什麼Man類的初始化化可以用Employee來初始化?
我們知道Go裡面規定如果我們定義了一個 interface 的變數,那麼這個變數裡面可以存實現這個 interface 的任意型別的對像。而 Employee 類實現了 gender 介面,而 Man 中成員有一個 gender 介面,因此 Man 可以用 Employee 來初始化。

4. 再補一個特性


內嵌介面的struct同樣滿足Go語言基礎:method 中提到的繼承和重寫的特性

method繼承和重寫
繼承:如果 struct 中的一個匿名段實現了一個 method,那麼包含這個匿名段的 struct 也能呼叫該 method。
重寫:如果 struct 中的一個匿名段實現了一個 method,包含這個匿名段的 struct 是可以重寫匿名欄位的方法的。