1、定义
接口代表一种调用契约,是多个方法声明的集合。
Go 接口实现机制很简洁,只要目标类型方法集合内包含接口声明的全部方法,就被视为实现了该接口,无须做显示声明。当然,目标类型可实现多个接口。
2、执行机制
接口有一个重要特征:将对象赋值给接口变量时,会复制该对象。
package main
type data struct {
x int
}
func main() {
d := data{100}
var t interface{} = d
println(t.(data).x)
}
其输出结果为:
100
我们甚至无法修改接口存储的复制品,因为它也是 unaddressable 的。
package main
type data struct {
x int
}
func main() {
d := data{100}
var t interface{} = d
p := &t.(data) // 错误: cannot take the address of t.(data)
t.(data).x = 200 // 错误: cannot assign to t.(data).x
}