"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 동적 키를 사용하여 YAML 파일을 구문 분석하는 방법은 무엇입니까?

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

2024년 11월 20일에 게시됨
검색:616

How to Parse YAML Files with Dynamic Keys in Go?

동적 키를 사용하여 Go 코드를 구문 분석하는 YAML

동적 키가 포함된 YAML 파일의 Go 코드를 구문 분석하려면 다음 단계를 따르세요.

1.yaml을 설치합니다. 라이브러리:

go get gopkg.in/yaml.v2

2. 모델 구조 정의:
표현할 구조를 생성합니다. YAML 데이터. 가능한 키를 모두 알고 있다면 일반 필드를 사용하여 정의할 수 있습니다. 그렇지 않으면 map[string]interface{} 필드를 사용하여 동적 키를 포함할 수 있습니다.

3. 사용자 정의 Unmarshaler 사용(선택 사항):
YAML 데이터 구문 분석 방법을 사용자 정의해야 하는 경우 사용자 정의 Unmarshaler를 사용할 수 있습니다. 이는 동적 키나 기타 복잡한 구문 분석 시나리오를 처리하는 데 도움이 될 수 있습니다.

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