- 所有变量都是有类型的
- == != 的比较首先需要左右两边的东西是同一个类型
- go 中的 nil 的使用只有相等与不相等比较
- 对于普通类型变量与 nil 比较时,即
var a KindA
a == nil 本质上是 (KindA)(a) == (KindA)(nil)
- 接口类型不是普通类型,接口是功能约束,即一种契约,某个具体类型实现接口契约后,就属于该接口类型。也就是说接口类型是动态类型,但我更喜欢称接口类型为功能契约,不是实际类型
var i InterfaceA
i == nil 本质上是 (nil)(i) == (nil)(nil)
var b KindB
b == nil 即 (KindB)(b) == (KindB)(nil)
i = b
i != nil 即 (KindB)(nil) != (nil)(nil) // 实际上这里是 (dynamicType)(nil) != (nil)(nil),此时已经不知道 dynamicType 的具体类型了
- 接口类型 是 类型的类型。接口类型接受实际类型(实现接口契约)后成为一个真类型,但是是动态的,能操作的只有接口本身带有的契约功能。
- 泛型 同样是 类型的类型。泛型接受实际类型后成为真类型,是静态的,操作它就是操作普通类型