英文:
Using reflect, how do you initialize value of a struct pointer field?
问题
package main
import (
"fmt"
"reflect"
)
type A struct {
D *int
}
func main() {
a := &A{}
v := reflect.ValueOf(a)
e := v.Elem()
f := e.Field(0)
z := reflect.Zero(f.Type().Elem())
f.Set(z)
fmt.Println(z)
}
panic: reflect.Set: value of type int is not assignable to type *int
how to set the *D to default value use reflect
英文:
package main
import (
"fmt"
"reflect"
)
type A struct {
D *int
}
func main() {
a := &A{}
v := reflect.ValueOf(a)
e := v.Elem()
f := e.Field(0)
z := reflect.Zero(f.Type().Elem())
f.Set(z)
fmt.Println(z)
}
panic: reflect.Set: value of type int is not assignable to type *int
how to set the *D to default value use reflect
答案1
得分: 13
你需要一个指针值(*int),但是reflect
文档中对于func Zero(typ Type) Value
的说明是:
>返回的值既不可寻址也不可设置。
在你的情况下,你可以使用New
代替:
z := reflect.New(f.Type().Elem())
英文:
You need to have a pointer value (*int), but the reflect
documentation states for func Zero(typ Type) Value
that:
>The returned value is neither addressable nor settable.
In your case you can instead use New
:
z := reflect.New(f.Type().Elem())
答案2
得分: 2
尝试一下
var i int
f.Set(reflect.ValueOf(&i))
英文:
try this
var i int
f.Set(reflect.ValueOf(&i))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论