废话不说了,直接上代码
package main
import "unsafe"
import "fmt"
func abc() {
type T struct {
a int
b int
c int
}
type SliceHeader struct {
addr uintptr
len int
cap int
}
t := &T{a: 1, b: 2, c: 3}
p := unsafe.Sizeof(*t)
println(int(p))
sl := &SliceHeader{
addr: uintptr(unsafe.Pointer(t)),
len: int(p),
cap: int(p),
}
b := *(*[]byte)(unsafe.Pointer(sl))
println(len(b))
fmt.Println(b)
b[0] = 7
b[4] = 5
b[8] = 8
fmt.Println(t)
}
func main() {
abc()
}
本文通过一个具体的示例展示了如何使用Go语言中的unsafe包来操作内存。具体包括定义结构体类型,获取结构体实例的大小,并通过unsafe.Pointer将结构体指针转换为切片头部,最终实现了对结构体字段的间接修改。

被折叠的 条评论
为什么被折叠?



