Цель состоит в том, чтобы установить новое значение a.Stringer.Name
с помощью отражения Go.
type A struct {
Stringer fmt.Stringer
}
type MyStringer struct {
Name string
}
func (m MyStringer) String() string {
return m.Name
}
a := &A{
Stringer: MyStringer {
Name: "Adam",
},
}
// The following code panics with: "reflect: reflect.Value.Set using unaddressable value"
reflect.ValueOf(a).Elem().
FieldByName("Stringer").Elem().
FieldByName("Name").Set(reflect.ValueOf("New name"))
Хотя с конкретными типами все работает нормально:
type B struct {
Stringer MyStringer
}
b := &B{
Stringer: MyStringer {
Name: "Adam",
},
}
reflect.ValueOf(b).Elem().
FieldByName("Stringer").
FieldByName("Name").Set(reflect.ValueOf("New value"))
Как сделатьструктура интерфейса адресуемая?Я что-то упустил?