关于Russ Cox在2009年12月发表的文章《Go数据结构:接口》(链接:https://research.swtch.com/interfaces),在内存优化部分,Russ提到如果存储在
结果是:-
interface{}
中的数据比uintptr
的大小还要小,那么该值将直接存储在接口中,不需要分配数据并获取其地址。如果使用以下代码进行测试:-package main
import (
"fmt"
"unsafe"
)
type iface struct {
_ unsafe.Pointer
data unsafe.Pointer
}
func main() {
var i interface{} = 12
var pi = (*iface)(unsafe.Pointer(&i))
fmt.Printf("if.data: %p", pi.data)
}
结果是:-
if.data: 0x127e2c
很明显这是一个地址,而不是优化后期望的值12。
Go语言不再支持接口优化了吗?还是我的理解有误?