Как читать срез в Reflect.FieldByName () - PullRequest
0 голосов
/ 14 мая 2018

Я передаю данные в функцию с интерфейсом типа ввода.

Этот код:

main(){
    SampleData := Input{
    Recipients: []string{"abc","efg"},
    Msg:        string("Test message"),
    }
    InsertInSendTBL(SampleData)
}

type Input struct {
    Recipients []string
    Msg        string
    sender      string
}
type Output struct {
    Recipients    []string
    Msg           string
    reciver     string
}
func InsertInSendTBL(Data interface{}) {
    DataInput := reflect.ValueOf(Data)
    NewVal := Output{
        Recipients: DataInput.FieldByName("Recipients").([]string{}),//LINE ERORE
        Msg:        DataInput.FieldByName("Msg").String(),
        sender:     "1000",
    }
}

Одним из моих полей структуры является фрагмент строки.Я искал в отражающей упаковке, но ничего не нашел, поэтому я использую ". ([] String {})".Результатом является эта ошибка:

утверждение недопустимого типа: DataInput.FieldByName («Получатели»). (Составной литерал) (неинтерфейсный тип отражает. Значение слева)

поэтому я пробую интерфейс в отражении Но другая ошибка

не может использовать DataInput.FieldByName ("Recipients"). Interface () (тип interface {}) как строка типа [] в значении поля: нужен типутверждение

1 Ответ

0 голосов
/ 14 мая 2018

Вам нужно объединить две попытки:

sliceOfString, ok := DataInput.FieldByName("Recipients").Interface().([]string)
if !ok {
    panic("Not a []string!")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...