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

Go에서 중첩된 키-값 쌍을 사용하여 YAML 파일을 구문 분석하는 방법은 무엇입니까?

2024년 11월 16일에 게시됨
검색:889

How to Parse a YAML File with Nested Key-Value Pairs in Go?

Go에서 YAML 파일 구문 분석

Go에서 YAML 파일을 구문 분석하려면 gopkg.in/yaml.v2를 통해 제공되는 YAML 라이브러리를 활용해야 합니다. 제공된 코드는 다음과 같이 중첩된 키-값 쌍을 사용하여 YAML 파일을 구문 분석하도록 설계되었습니다.

firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname

그러나 값을 동반하지 않고 키-값 쌍을 구문 분석하려고 하면 문제가 발생합니다. 구현된 구조체는 이러한 값을 정의하지 않으므로 구문 분석 중에 오류가 발생합니다.

이 문제를 해결하려면 Google Cloud 또는 Kubernetes의 service.yaml과 같은 실제 YAML 예시를 통합하는 것을 고려해 보세요.

apiVersion: v1
kind: Service
metadata:
  name: myName
  namespace: default
  labels:
    router.deis.io/routable: "true"
  annotations:
    router.deis.io/domains: ""
spec:
  type: NodePort
  selector:
    app: myName
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443

이 예에서는 중첩된 키-값 관계를 보여주고 실제 사용 사례를 제공합니다. 해당 Go 구조체는 다음과 유사합니다.

type Service struct {
    APIVersion string `yaml:"apiVersion"`
    Kind       string `yaml:"kind"`
    Metadata   struct {
        Name      string `yaml:"name"`
        Namespace string `yaml:"namespace"`
        Labels    struct {
            RouterDeisIoRoutable string `yaml:"router.deis.io/routable"`
        } `yaml:"labels"`
        Annotations struct {
            RouterDeisIoDomains string `yaml:"router.deis.io/domains"`
        } `yaml:"annotations"`
    }
    Spec struct {
        Type     string `yaml:"type"`
        Selector struct {
            App string `yaml:"app"`
        }
        Ports []struct {
            Name       string `yaml:"name"`
            Port       int    `yaml:"port"`
            TargetPort int    `yaml:"targetPort"`
            NodePort   int    `yaml:"nodePort,omitempty"`
        } `yaml:"ports"`
    }
}

프로세스를 단순화하기 위해 yaml-to-go 및 json-to-go와 같은 서비스는 YAML을 Go 구조체로 변환하는 편리한 도구를 제공하여 구문 분석 작업을 보다 쉽게 ​​관리할 수 있도록 합니다.

마지막으로, YAML 파일을 구조체로 역마샬링하려면 다음 코드를 사용할 수 있습니다.

var service Service

err := yaml.Unmarshal(yourFile, &service)
if err != nil {
    panic(err)
}

이 접근 방식을 사용하면 서비스 구조를 통해 구문 분석된 데이터에 액세스할 수 있으므로 Go 애플리케이션에서 YAML 파일 정보와 상호 작용할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3