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

小龙虾0o0 · · 336 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

观察代码运行结果,理解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字段地址算出实例对象的地址
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:小龙虾0o0

查看原文:Golang unsafe初探——根据字段算出结构体地址

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

336 次点击  
加入收藏 微博
上一篇:Go语言入门
下一篇:golang mysql实现
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传