Golang unsafe初探——根据字段算出结构体地址

在Go中,第一个字段的地址即为结构体地址
观察代码运行结果,理解golang对象与字段地址的偏移计算
说明:Pointer和uintptr方法可以理解为本质上都是指针,前者一般用来转化类型,后者用来计算地址

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字段地址算出实例对象的地址
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。