美文网首页
Golang unsafe初探——根据字段算出结构体地址

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

作者: 小龙虾0o0 | 来源:发表于2020-08-26 17:30 被阅读0次

    在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字段地址算出实例对象的地址
        }
    }
    

    相关文章

      网友评论

          本文标题:Golang unsafe初探——根据字段算出结构体地址

          本文链接:https://www.haomeiwen.com/subject/eqrfsktx.html