将对象赋值给接口是,会发生拷贝,而接口内部存储的是只想这个复制品的指针,也就意味着接口无法修改状态,也无法获取指针。
... func main() { pc := PhoneConnecter{"ipad book pro"} //实例化一个结构 var a Connecter //定义a为接口变量 a = Connecter(pc) //接口强制转换 a.Connect() pc.name = "Iphone 7" a.Connect() ... /*输出 pc.name= "ipad book pro" Connected: ipad book pro pc.name = "Iphone 7" Connected: ipad book pro */ }
只有当 接口存储的类型和对象都为nil时,接口才等于nil
package main import "fmt" func main() { var a interface{} fmt.Println(a == nil) var p *int = nil a = p fmt.Println(a == nil) } /*输出 true false */接口调用不会做Receiver的自动转换
接口同样支持匿名字段的方法
接口也可以实现类似OOP(面向对象编程)中的多态
空接口可以作为任何类型数据的容器