interface 是 golang 中最重要的特征之一,也就是有了这个特征,使golang具有对象语言的特质(该表述可能会有争议),interface 类似于其他语言的多态,可以理解为对一组方法的定义,但是不需要实现。在编写和设计interface时尤其要注意是值传递还是指针传递。建议的方式是:使用值传递,实际上使用值传递,底层的共享数组是不变的,仍然是指针。
接口的实质上在底层用两个字段表示:
- 一个指向某些特定信息的指针。可以将其看做“type”
- 数据指针,如果存的数据时指针,则直接存储,如果存储的数据是值,则存储指向该值的指针。
- 当然,如果希望修改底层基础数据,则必须使用指针传递(将对象指针的赋值给接口变量)
type F interface {
f()
}
type S1 struct{