1

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

4

1 回答 1

3

使用以下代码创建指向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
于 2021-12-03T20:17:17.190 回答