为了账号安全,请及时绑定邮箱和手机立即绑定

go reflect: 如何动态创建一个指向...的指针?

go reflect: 如何动态创建一个指向...的指针?

Go
SMILET 2023-03-07 11:05:32
我想创建一个reflect.Value代表指向最终值的多级嵌套指针的。编译时不知道嵌套级别。如何创建指向使用指针的指针reflect?在尝试创建指向指针的指针时,我已经遇到了“无法寻址的值”障碍。dave := "It's full of stars!"stargazer := reflect.ValueOf(&dave)stargazer = stargazer.Addr() // panic: reflect.Value.Addr of unaddressable value等相同stargazer.UnsafeAddr()。虽然 etc.stargazer.Elem().UnsafeAddr()有效,但我看不出这如何帮助(递归地)创建一个指向指针的新非零指针...
查看完整描述

1 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

使用以下代码创建指向中值的指针stargazer。


p := reflect.New(stargazer.Type())

p.Elem().Set(stargazer)

// p.Interface() is a pointer to the value stargazer.Interface()

例子:


dave := "It's full of stars!"

stargazer := reflect.ValueOf(dave)

for i := 0; i < 10; i++ {

    p := reflect.New(stargazer.Type())

    p.Elem().Set(stargazer)

    stargazer = p

}

fmt.Printf("%T\n", stargazer.Interface()) // prints **********string


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号