Как структурировать файл yaml в родительском дочернем порядке?

Я хочу сформировать структуру с помощью 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: локальный = хост + порт, то же самое для разработки и производства, чтобы легко динамически настраивать и настраивать

Буду признателен за вашу помощь в структуре golang, а также за вашу помощь.

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
0
674
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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"`
}

Другие вопросы по теме