Как заполнить структуру из файла - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть struct, который сконструирован так:

type UrlData struct {
    As int 
    Iso string 
}

Я создаю его экземпляр и после этого читаю текстовый файл (см. Ниже), чтобы проверить, равно ли определенное поле структуры:значение из txt-файла (да, я знаю, что было бы намного проще сравнивать явно, но чтение данных из файла является обязательным условием)

txt-файл имеет следующий формат:

as 646
iso us

При чтении txt-файла я хочу знать, равно ли поле * UrlData.As (в экземпляре) значению из файла, т.е. 646.

Проблема заключается в том,Я не знаю, как сопоставить текущее поле из текстового файла с именем поля структуры.Каков наиболее адекватный способ сделать это?

1 Ответ

0 голосов
/ 19 сентября 2018

Вам потребуется реализовать механизм, который может определить, какое поле названо в строке, и сопоставить его с соответствующим полем в структуре.Идентификация поля очень проста: используйте strings.Split в строке, считанной из файла, разделите ее пробелом и получите первое значение.

Поиск в структуре может потребовать нескольких подходов.Самым простым было бы явно проверить это в условном или аналогичном (я избегал показывать код для чтения файла, поскольку суть вашего вопроса, кажется, совпадает со значениями структуры):

// Struct
var myStruct *UrlData = // some instantiation

// Read line from file
line = // TODO

// Determine the field
parts := strings.Split(line, " ")
name, value := parts[0], parts[1]

// Look up the fields in the struct
switch name {
case "as":
        return myStruct.As == value
case "iso":
        return myStruct.Iso == value
}

ЭтоТакже возможно использовать отражение, чтобы динамически искать поле структуры по имени в файле, но это будет более сложным, и его следует избегать до тех пор, пока вам не потребуется действительно общее решение (и даже тогда лучше избегать - отражение не является ясным кодом!).

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