一般不会需要指向接口的指针,应该将接口作为值传递:底层的数据,仍然可以是指针。
一个接口的内部实现,有两个指针类型字段:
//src/runtime/runtime2.go
type iface struct {
tab *itab
data unsafe.Pointer
}
- itab:用来存放接口自身类型和绑定的实例类型及实例相关的函数指针。
- 数据指针data:指向接口绑定的实例的副本,接口的初始化也是一种值拷贝。data指向具体的实例数据,如果传递给接口的是值类型,则data指向的是实例的副本。如果传递给接口的是指针类型,则data指向指针的副本。
- 无论接口的转换,还是函数调用,Go遵循一样的规则:值传递
本文深入探讨了Go语言中接口的内部实现原理,包括itab和data指针的作用,以及接口如何进行值传递。理解这些概念对于掌握Go语言的高级特性至关重要。
286





