Разбор кода 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