Golang中如何通过reflect.Value获取指向变量的指针?
关于Go反射获取原变量指针的问题
你的代码里,v := reflect.ValueOf(someValue) 其实是把 someValue 的值拷贝了一份,生成的反射对象和原变量根本不在同一块内存里,所以这个 v 是不可寻址的——你没法从它身上拿到原变量 &someValue 的地址。
要是硬调用 v.Addr() 直接会panic,因为只有那种关联着原变量内存的可寻址反射对象,才能用 Addr() 拿地址。
你说的两种常规方法确实不符合你的场景,但更关键的是:仅靠当前这个 v,根本做不到指向 &someValue。因为这个 v 只是个值副本,和原变量没任何内存关联,没法回溯到原变量的地址。
除非你一开始创建 v 的时候,就用指针转元素的方式:v := reflect.ValueOf(&someValue).Elem(),这种情况下 v 是可寻址的,直接 v1 := v.Addr() 就能拿到指向原变量的反射对象。
内容的提问来源于stack exchange,提问作者serge sheff
相关产品推荐
相关产品推荐

