示例代码
type mInterface interface {
foo()
}
type mStruct struct {
mInterface
}
func (m mStruct) foo() {
// do something
}
func main() {
var tmp mInterface = mStruct {}
fmt.Printf("%v\n", tmp)
tmp = new(mStruct)
fmt.Printf("%v\n", tmp)
}
测试输出
{}
&{}
为什么tmp
这个变量在这里既可以是指针,也可以是实例?
查阅了一下资料,觉得是自己对
golang
的interface
理解不够正确。官方文档 中对
Interface
是这样定义的:即是说
interface
类型的变量可以保存含有属于这个interface
类型方法集的任何类型的值,而*mStruct
包含mStruct
和*mStruct
的所有方法,因此实现了接口,所以可以赋值给tmp
。