«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как анализировать файлы YAML с динамическими ключами в Go?

Как анализировать файлы YAML с динамическими ключами в Go?

Опубликовано 20 ноября 2024 г.
Просматривать:133

How to Parse YAML Files with Dynamic Keys in Go?

Разбор кода Go YAML с динамическими ключами

Чтобы проанализировать код Go в файле YAML, содержащем динамические ключи, выполните следующие действия:

1. Библиотека:

go get gopkg.in/yaml.v2

2. Определите структуру модели:
Создайте структуру для представления YAML-данные. Если вы знаете все возможные ключи, вы можете определить их, используя обычные поля, в противном случае вы можете использовать поля карты[строка]интерфейса{} для хранения динамических ключей.

3. Используйте собственный демаршалер (необязательно):
Если вам нужно настроить способ анализа данных YAML, вы можете использовать собственный демаршалер. Это может помочь вам обрабатывать динамические ключи или другие сложные сценарии синтаксического анализа.

4. Анализ данных YAML:
Используйте функцию yaml.Unmarshal для анализа данных YAML и десериализации их в структуру модели.

Пример:
В следующем примере показано, как анализировать файл YAML с динамическими ключами:

package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;

`

type MajorVersion struct {
    Current                 string   `yaml:"current"`
    MimeTypes               []string `yaml:"mime_types"`
    SkipVersionValidation  bool     `yaml:"skip-version-validation"`
    SkipMimeTypeValidation bool     `yaml:"skip-mime-type-validation"`
}

type Environment struct {
    SkipHeaderValidation bool
    Versions             map[string]MajorVersion `yaml:",inline"`
}

func main() {
    e := map[string]Environment{}
    if err := yaml.Unmarshal([]byte(data), &e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}

Вывод:

map[string]main.Environment{
    "development": {
        SkipHeaderValidation: true,
        Versions: {
            "V1": {
                Current:                "1.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"},
                SkipVersionValidation:  true,
                SkipMimeTypeValidation: true,
            },
            "V2": {
                Current:                "2.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"},
                SkipVersionValidation:  false,
                SkipMimeTypeValidation: false,
            },
        },
    },
}
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3