GO 指针运算

54 阅读1分钟
package main


import (
    "fmt"
    "strconv"
    "unsafe"
)


type User struct {
    Id   int64
    Age  int32
    Name int64
}


func main() {
    u := &User{Id: 123, Age: 456, Name: 789}
    p := (uintptr)(unsafe.Pointer(u))
    idp := (*int64)(unsafe.Pointer(p))
    fmt.Println("id:" + strconv.FormatInt(*idp, 10))
    agep := (*int32)(unsafe.Pointer(p + 8))
    fmt.Println("age:" + strconv.Itoa(int(*agep)))
    namep := (*int64)(unsafe.Pointer(p + 16))
    fmt.Println("name:" + strconv.FormatInt(*namep, 10))
}

输出

id:123

age:456

name:789