Задайте значение поля с помощью отражения Go реализации интерфейса получателя без указателя - PullRequest
0 голосов
/ 16 мая 2019

Цель состоит в том, чтобы установить новое значение 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"))

Как сделатьструктура интерфейса адресуемая?Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...