go 通过指针修改结构体小写字段的值

package main

import (
	"fmt"
	"unsafe"
)

type W struct {
	b int32
	c int64
}

func main() {
	var w  = W{}
	//这时w的变量打印出来都是默认值0,0
	fmt.Println(w.b,w.c)
	//现在我们通过指针运算给b变量赋值为10
	b := unsafe.Pointer(uintptr(unsafe.Pointer(&w)) + unsafe.Offsetof(w.b))
	*((*int64)(b)) = 10
	//此时结果就变成了10,0
	fmt.Println(w.b,w.c)
}

 !!! 实际中最好还是少使用,以免出现不可控的情况。还是需要遵循语法规则。 

posted on 2021-01-08 09:42  biwentao  阅读(369)  评论(0)    收藏  举报

导航