Pointers 通过Go中的反射修改结构中的空指针字段

Pointers 通过Go中的反射修改结构中的空指针字段,pointers,go,reflection,null,Pointers,Go,Reflection,Null,我试图通过反射循环修改空指针字段“MyField”的间接值。 我感到恐慌:reflect:reflect.Value.Set的调用为零值 有什么办法吗 主程序包 进口( “fmt” “反映” ) 类型MyStruct struct{ MyField*字符串 } func main(){ s:=MyStruct{} v:=反射值 对于i:=0;i

我试图通过反射循环修改空指针字段“MyField”的间接值。 我感到恐慌:reflect:reflect.Value.Set的调用为零值

有什么办法吗

主程序包
进口(
“fmt”
“反映”
)
类型MyStruct struct{
MyField*字符串
}
func main(){
s:=MyStruct{}
v:=反射值
对于i:=0;i

非常感谢

该计划有两个问题

无法设置该字段,因为
v
不是可寻址值。要获取可寻址值,请从指向
s
的指针创建一个reflect.value:

s := MyStruct{}
v := reflect.ValueOf(&s).Elem()
程序试图通过nil指针设置一个值。反射代码与
*s.MyField=“some changed name”
相同。如果MyField与问题中的字段一样为零,则此语句将引起恐慌。要解决此问题,请在字段中设置指针:

t := "some changed name"
valueField.Set(reflect.ValueOf(&t))

非常感谢!在这种情况下,我知道字段类型。如果我想用所指类型的空/零值(即本例中的空字符串)初始化字段,该怎么办?有什么想法吗?
valueField.Set(reflect.New(valueField.Type().Elem())
t := "some changed name"
valueField.Set(reflect.ValueOf(&t))