Динамически установите для поля структуры значение среза с помощью отражения - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующий фрагмент кода, который после некоторого размышления устанавливает для поля структуры строковое значение

                switch fType := v.(type) {
                case MyCompositeFlagString:
                    s, ok := userInput.(string)
                    if !ok {
                        log.Printf("Erroneous input type:%T and input value: %v\n", userInput, userInput)
                        return ErrUnexpectedInput
                    }
                    valueField := values.Elem().Field(i).FieldByName("MyFlagString").FieldByName("Value")
                    valueField.SetString(s)

Я не вижу никакого метода SetSlice в reflect пакете.

Как я могу выполнить указанную выше операцию, если valueField имеет тип []string?

1 Ответ

1 голос
/ 06 августа 2020

Value.SetString() - удобный метод установки значений string. По очевидным причинам не существует отдельного метода для типов всех , но есть метод «generi c» Value.Set(), вы можете его использовать. Вам просто нужно получить reflect.Value из значения, которое вы хотите установить:

var someSlice ...
valueField.Set(reflect.ValueOf(someSlice))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...