Как структурировать файл yaml в порядке родительского дочернего? - PullRequest
0 голосов
/ 28 мая 2019

Я хочу сформировать структуру с использованием golang через файл yaml, но мне трудно это сделать.

api:
  local:
    host: localhost
    port: 8085
  develop:
    host:
    port:
  production:
    host:
    port:
rest-api:
  local:
    host: localhost
    port: 8085
  develop:
    host:
    port:
  production:
    host:
    port:

это формат в моем файле yaml

Ожидаемый код этого: я хочу создать динамический URL-адрес API в локальном, развивающемся и производственном формате, например, api: local = host + port, то же самое для разработки и производства, чтобы легко его динамически настраивать и настраивать

Был бы признателенваша помощь в golang struct, а также ваша помощь.

1 Ответ

1 голос
/ 28 мая 2019

Этот онлайн-ресурс поможет вам на полпути:

https://mengzhuo.github.io/yaml-to-go/

Вставка вашего yaml дает следующее:

type AutoGenerated struct {
    API struct {
        Local struct {
            Host string `yaml:"host"`
            Port int    `yaml:"port"`
        } `yaml:"local"`
        Develop struct {
            Host interface{} `yaml:"host"`
            Port interface{} `yaml:"port"`
        } `yaml:"develop"`
        Production struct {
            Host interface{} `yaml:"host"`
            Port interface{} `yaml:"port"`
        } `yaml:"production"`
    } `yaml:"api"`
    RestAPI struct {
        Local struct {
            Host string `yaml:"host"`
            Port int    `yaml:"port"`
        } `yaml:"local"`
        Develop struct {
            Host interface{} `yaml:"host"`
            Port interface{} `yaml:"port"`
        } `yaml:"develop"`
        Production struct {
            Host interface{} `yaml:"host"`
            Port interface{} `yaml:"port"`
        } `yaml:"production"`
    } `yaml:"rest-api"`
}

Есть очевидные дубликаты подтипа. Так что это можно обрезать.

Первый проход:

type Address struct {
    Host string `yaml:"host"`
    Port int    `yaml:"port"`
}

type MyConfig struct {
    API struct {
        Local      Address `yaml:"local"`
        Develop    Address `yaml:"develop"`
        Production Address `yaml:"production"`
    } `yaml:"api"`
    RestAPI struct {
        Local      Address `yaml:"local"`
        Develop    Address `yaml:"develop"`
        Production Address `yaml:"production"`
    } `yaml:"rest-api"`
}

Второй (и последний) проход:

type Address struct {
    Host string `yaml:"host"`
    Port int    `yaml:"port"`
}

type Deployment struct {
    Local      Address `yaml:"local"`
    Develop    Address `yaml:"develop"`
    Production Address `yaml:"production"`
}

type MyConfig struct {
    API     Deployment `yaml:"api"`
    RestAPI Deployment `yaml:"rest-api"`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...