Golang видоизменяет поле структуры один за другим, используя отражение - PullRequest
0 голосов
/ 12 июля 2019

У меня есть такая структура:

type User struct {
    Name   string
    UID    int
    Bio    string
}

У меня есть заданная экземплярная структура, и я хочу перебрать поля в этом объекте и изменить их одно за другим.

Это то, что у меня есть до сих пор

user := User{
    Name: "Test",
    UID:  1,
    Bio:  "Test bio",
}

reflectVal := reflect.ValueOf(user)
numFields := reflectVal.NumField()

for i := 0; i < numFields; i++ {
    fieldType := reflect.TypeOf(reflectVal.Field(i))
    reflectVal.Field(i).Set(reflect.Zero(fieldType))
    ...
}

Но я получаю эту ошибку:

panic: reflect: reflect.Value.Set using unaddressable value

Есть ли способ сделать это?

1 Ответ

1 голос
/ 12 июля 2019

Значение отражения не адресуемое . Исправьте, создав значение отражения из указателя на структуру.

reflectVal := reflect.ValueOf(&user).Elem()

Используйте следующую инструкцию, чтобы получить тип поля. Код в вопросе получает тип refle.Value, а не тип значения, содержащегося в refle.Value.

fieldType := reflectVal.Field(i).Type()

Запустите его на игровой площадке Go .

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