Struct
Go 用struct
实现OOP, 匿名字段可看作实现了继承关系,子类也可以重写父类的方法。
Note, there is also exported and unexported fields in struct, the same pattern like exported and unexported variable, func and method.
1 | // Person 在Student中成为了匿名字段 |
Interface
在Go中,interface
定义方法的声明signature,具体类型实现方法的定义.
1 | // interface define |
空接口,没有方法,所以可以认为所有类型都实现了它,可以用作函数的参数去接收任何数据类型。 The main usage of empty interface is func arguments.
1 | type A interface {} |
注意fmt.Println()
就是这么实现的,用的匿名的空接口。
1 | // 可变参数 + 匿名空接口 |
How to 判断接口对应的具体类型呢,语法:
1 | // instance: 解析后的实际类型 |
举例:
1 | type A interface {} |
接口还可以多继承, 实现C
的类型必须要实现C
中自身和继承的所有的方法:
1 | type A interface { |