猿问

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

我想创建一个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()有效,但我看不出这如何帮助(递归地)创建一个指向指针的新非零指针...


SMILET
浏览 100回答 1
1回答

慕勒3428872

使用以下代码创建指向中值的指针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++ {&nbsp; &nbsp; p := reflect.New(stargazer.Type())&nbsp; &nbsp; p.Elem().Set(stargazer)&nbsp; &nbsp; stargazer = p}fmt.Printf("%T\n", stargazer.Interface()) // prints **********string
随时随地看视频慕课网APP

相关分类

Go
我要回答