這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
對上一篇文章用到的匿名介面的深入理解:http://blog.csdn.net/uudou/article/details/52456133
對於 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 是可以重寫匿名欄位的方法的。
第八節 結構體和介面
golang 中的內嵌(embeded)