Есть две проблемы с программой.
Поле не может быть установлено, поскольку v
не является адресуемым значением.Чтобы получить адресуемое значение, создайте отражающее значение из указателя на s
:
s := MyStruct{}
v := reflect.ValueOf(&s).Elem()
Программа пытается установить значение с помощью нулевого указателя.Код отражения идентичен *s.MyField = "some changed name"
.Это утверждение вызовет панику, если MyField равен нулю, как в вопросе.Чтобы это исправить, установите указатель на поле:
t := "some changed name"
valueField.Set(reflect.ValueOf(&t))
Запустите его на игровой площадке