观察代码运行结果,理解golang对象与字段地址的偏移计算
type Buffer struct {
buf [1500]byte
n int8
}
func main() {
instance := new(Buffer)
{
println(instance)
println(instance.buf[:])
println(&instance.buf[0])
b := (*Buffer)(unsafe.Pointer(&instance.buf[0])) // 根据buf字段算出实例对象的地址
println(b.buf[:])
}
{
println(&instance.n)
println(unsafe.Offsetof(instance.n))
println(unsafe.Pointer(uintptr(unsafe.Pointer(&instance.n)) - unsafe.Offsetof(instance.n))) // 根据n字段地址算出实例对象的地址
}
}
有疑问加站长微信联系(非本文作者)