package main
import (
"fmt"
"unsafe"
)
func main() {
var x struct {
a int
b int
c []int
}
x.b = 2
// unsafe.Offsetof 函数的参数必须是一个字段, 比如 x.b, 方法会返回 b 字段相对于 x 起始地址的偏移量, 包括可能的空洞。
//pb := &x.b //等价pb := (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&x)) + unsafe.Offsetof(x.b)))
pb := (*int)(unsafe.Pointer(uintptr(unsafe.Pointer(&x)) + unsafe.Offsetof(x.b)))
//*pb = 42
fmt.Println(*pb) // "42"
}
golang 读取结构体私有字段 unsafe
最新推荐文章于 2024-08-12 11:59:03 发布
本文详细解释了Go语言中`unsafe.Offsetof`函数的工作原理,并通过示例展示了如何计算结构体字段的偏移量,以进行间接内存操作。重点讲解了如何在`main`函数中使用它来修改结构体变量的成员。
摘要由CSDN通过智能技术生成