主要内容
1.组合
2.接口
3.常见问题
4.总结
1.组合
Golang中没有OOP中继承的概念,取而代之的是组合,同样起到属性和方法继承 的作用,特别是匿名组合,其表现形式和继承的行为类似,但是却有很多不同的地方,相对于继承、多态这些典型的OOP思想,组合显得更加简洁灵活。
1.1.一般组合
type Wifi struct {
Name string
}
type Phone struct {
WifiMdl Wifi
}
func Test_Group(t *testing.T) {
phone := Phone{}
phone.WifiMdl = Wifi{
Name: "..."
}
...
}
这是一个简单的示例,直接将其他的类型作为自己的内部成员;那么新类型的实例就可以直接对此成员进行赋值和初始化;
1.2.匿名组合
当我们嵌入一个类型,这个类型的方法就变成了外部类型的方法,但是当它被调用时,方法的接受者是内部类型(嵌入类型),而非外部类型。— Effective Go
理解了这句话也就理解匿名组合:简单地可以理解为,内部类型的成员名可理解为内部类型名,在外部类型未定义相同名称的属性和方法时,内部方法可提升为外部类型的属性和方法,但实际上,属性和方法的所有者和调用的接受仍然为内部类型
// 内部类型
typ