go-使用 unsafe 修改 struct 中的 field 的值
Posted 一页天书不分说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go-使用 unsafe 修改 struct 中的 field 的值相关的知识,希望对你有一定的参考价值。
以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理:
首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的:
func unsafeValueOf(val reflect.Value) reflect.Value { uptr := unsafe.Pointer(val.UnsafeAddr()) return reflect.NewAt(val.Type(), uptr).Elem() }
你有一个 struct:
type haoba struct { i int }
现在你想通过 reflect 的方式去改这个 i int。
下面是代码:
func pobokeyuan() { phaoba := &haoba{i: 1} v := reflect.ValueOf(phaoba).Elem() t := v.Type() var j = 4 vj := reflect.ValueOf(j) f := t.Field(0) fv := v.FieldByName(f.Name) d := unsafeValueOf(fv) d.Set(vj) fmt.Println("we can do this ", phaoba.i) }
以上是关于go-使用 unsafe 修改 struct 中的 field 的值的主要内容,如果未能解决你的问题,请参考以下文章