interface { MethodSignature1 MethodSignature2 }
type InterfaceName interface{ MethodSignature1 MethodSignature2 }
空接口 interface{}
接口的命名一般以“er ”结尾
接口定义的方法声明不需要func引导
在接口定义中,只有方法声明没有方法实现。
实例赋值接口,如果具体类型的实例的方法集是某个接口的方法集的超集,则该具体类型实现了接口,可将该类型的具体实例赋值给接口类型的变量。接口被初始化后,调用接口的方法就相当于调用接口绑定的具体类型的方法。
接口变量赋值给接口变量
已经初始化的接口类型变量a 直接赋值给另一种接口变量b ,要求 b方法集是a 的方法
的子集。此时 Go 编译器会在编译时进行方法集静态检查。这个过程也是接口初始化的
方式,此时接口变量b绑定的具体实例是接口变量a绑定的具体实例的副本。
i.(TypeName)
o:=i.(TypeName)
if v,ok := i.(TypeName);ok { }
switch type := i.(TypeName) case type`: xxx case type2: xxx default: xxx