指针的偏移运算
package main
import (
"fmt"
"unsafe"
)
type W struct {
a byte
b int32
c int32
}
func main() {
var w = W{b: 32, c: 64}
t := unsafe.Pointer(&w) //unsafe.Pointer可以和任何指针类型互相转换
var c = (*int32)(unsafe.Pointer(uintptr(t) + unsafe.Offsetof(w.a))) //uintptr是唯一可以用来运算的指针,通过uintptr偏移来获取各个元素在内存中的位置,偏移a的位移,就拿到了w.a的指针
*c = 24
fmt.Println(w)
}