Устранение неполадок в структуре YAML - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть очень простая структура YAML, которую я пытаюсь записать и прочитать из файла.

appName:
   version: 1.2.3.4
   md5_checksum: 987654321

И я действительно изо всех сил пытаюсь понять вложенные структуры и как они связаны с маршалингом yaml.

На данный момент у меня есть следующее:

type Application struct {
    Name     string `yaml:"application"`
    Version  string `yaml:"version"`
    Checksum int    `yaml:"md5_checksum"`
}

yamlData := Application{"MyProgram", "1.2.3.4", 34235234123}
y, err := yaml.Marshal(yamlData)
if err != nil {
    log.Fatal("Yaml marshal failed")
}

err = ioutil.WriteFile("applications.yaml", y, 0644)
if err != nil {
    log.Fatal("File write failed")
}

Это приближает меня, но файл выглядит следующим образом:

application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123

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

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я решил свою собственную проблему с помощью KibGzr.

Никаких структур, необходимых только для шагов маршалинга.

yamlData := map[string]map[string]string{
    appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}

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

appName:
  md5_checksum: checksumString
  version: appVersion

Спасибо за помощь!

0 голосов
/ 26 ноября 2018

Вы можете определить структуру приложения как

type AppVersion struct {
    Version  string `yaml:"version"`
    Checksum int    `yaml:"md5_checksum"`
}

type Application struct {
    Name AppVersion `yaml:"appName"`
}

Затем вызвать AppVersion как

yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...