Как упаковывают данные в 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 шт):
Приравнивать структуры к ассоциативным массивам в PHP нельзя.
Последние больше похожи на map в Go, которые вы
вполне можете использовать тут.
Технически, по полям структуры пройтись можно с помощью
reflect, но тут это явный перебор. Тем более, что одна из
Go-поговорок
явно гласит, что «reflection is never clear».
Вообще, конфигурацию лучше декодировать в структуры готовыми средствами,
типа
encoding/json.
Или вообще пользоваться переменными окружения и флагами.