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