Go를 사용하여 YAML의 동적 키를 구문 분석하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-04 03:26:30
원래의
469명이 탐색했습니다.

How to Parse Dynamic Keys in YAML with Go?

Go를 사용하여 YAML에서 동적 키 구문 분석

Go에서 YAML 파일로 작업할 때 파일 내의 키 이름이 달라지는 시나리오가 발생할 수 있습니다. 이는 API 버전 관리 또는 동적 구성 목적으로 자주 사용됩니다. 이러한 YAML 구조를 효과적으로 구문 분석하려면 사용자 지정 구문 분석 전략을 사용해야 합니다.

문제 요약

API 버전 관리와 관련하여 다양한 버전을 나타내는 키가 있는 YAML 파일이 있을 수 있습니다. , "V1", "V2", "V3" 등과 같은. 문제는 이러한 버전이 파일에 항상 존재하지 않을 수도 있고 순서가 일관되지 않을 수도 있다는 것입니다.

사용자 정의 Unmarshaler 접근 방식

이 문제를 해결하려면 해당 버전에 대한 사용자 정의 Unmarshaler 구현을 고려하십시오. 데이터 구조. 이를 통해 언마샬링 프로세스를 제어하고 동적 키 값을 처리할 수 있습니다.

<code class="go">package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

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
}

func (e *Environment) UnmarshalYAML(unmarshal func(interface{}) error) error {
    var params struct {
        SkipHeaderValidation bool `yaml:"skip-header-validation"`
    }
    if err := unmarshal(&amp;params); err != nil {
        return err
    }
    var versions map[string]MajorVersion
    if err := unmarshal(&amp;versions); err != nil {
        // Here we expect an error because a boolean cannot be converted to a MajorVersion
        if _, ok := err.(*yaml.TypeError); !ok {
            return err
        }
    }
    e.SkipHeaderValidation = params.SkipHeaderValidation
    e.Versions = versions
    return nil
}

func main() {
    var e map[string]Environment
    if err := yaml.Unmarshal([]byte(data), &amp;e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}</code>
로그인 후 복사

Environment 구조체에 대한 사용자 정의 Unmarshaler를 정의하면 YAML 파일 내에서 부울 구조와 중첩 구조를 모두 효과적으로 처리할 수 있습니다.

결론

사용자 정의 언마샬러는 Golang에서 복잡하고 동적인 YAML 구조를 구문 분석하는 강력한 방법을 제공합니다. 사용자 정의된 역마샬링 논리를 구현하면 데이터 구조를 다양한 키 형식에 맞게 조정할 수 있으므로 시간이 지남에 따라 구조가 변경될 수 있는 상황에서 YAML 파일 작업을 더 쉽게 할 수 있습니다.

위 내용은 Go를 사용하여 YAML의 동적 키를 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿