Как упаковывают данные в Go?

Начал изучать Go после php и решил в целях обучения написать небольшую программку, которая давно была нужна. Натолкнулся на одну проблему. Например в php, если мне нужен некоторый пакет данных, я пишу:

$array = array(
    'foo'   => null,
    'bar'   => null,
);
foreach ($array as $key => $value) {...}

И в этом цикле я могу прочитать нужные данные из нужного места и как-то отреагировать на них.

Не пойму как это же сделать в Go Можно конечно сделать все линейно, обычным присваиванием, но хочется чтобы код выглядел симпатичней и понятней для дальнейшего прочтения и использования.

Пишу вот так:

        type pluginSettings struct {
            app string
            name string
            version string
            vendor string
            frontend bool
            settings bool
        }

А как потом перебрать и присвоить данным их значения? У меня есть конфигурационный текстовый файл, в котором хранятся настройки с аналогичными именами. Но конфиг большой и для этой части кода нужна только его часть, которая читается с определенной логикой и приоритетами. Просто так считать часть конфига нельзя. Нужно именно перебирать данные.


Ответы (1 шт):

Автор решения: Ainar-G

Приравнивать структуры к ассоциативным массивам в PHP нельзя. Последние больше похожи на map в Go, которые вы вполне можете использовать тут.

Технически, по полям структуры пройтись можно с помощью reflect, но тут это явный перебор. Тем более, что одна из Go-поговорок явно гласит, что «reflection is never clear».

Вообще, конфигурацию лучше декодировать в структуры готовыми средствами, типа encoding/json. Или вообще пользоваться переменными окружения и флагами.

→ Ссылка