示例代码
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。