Go에서 YAML 파일 구문 분석
문제:
Go의 YAML 파일. 다음은 구문 분석하려는 샘플 YAML 파일입니다.
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
해결책:
주어진 YAML 파일을 구문 분석하려면 다음과 같은 구조체를 생성해야 합니다. 구조를 정확하게 반영합니다. 귀하의 경우 YAML 파일에는 중첩된 요소가 포함되어 있으므로 구조체는 해당 중첩을 반영해야 합니다. 올바른 구조체 정의는 다음과 같습니다.
type FirewallNetworkRule struct { Src string `yaml:"src"` Dst string `yaml:"dst"` } type Config struct { FirewallNetworkRules map[string][]FirewallNetworkRule `yaml:"firewall_network_rules"` }
이제 YAML 파일을 Config 구조체로 역마샬링하려면 다음 코드를 사용하세요.
var config Config err := yaml.Unmarshal(yamlFile, &config) if err != nil { panic(err) } fmt.Printf("Value: %#v\n", config.FirewallNetworkRules)
고급 예:
Kubernetes 또는 Google Cloud 서비스 YAML과 같은 복잡한 YAML 파일로 작업할 때 복잡한 데이터 구조를 나타내기 위해 구조체를 중첩해야 할 수도 있습니다. 예를 들어 다음 YAML은 Kubernetes 서비스를 정의합니다.
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
이 YAML에 해당하는 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"` } `yaml:"metadata"` Spec struct { Type string `yaml:"type"` Selector struct { App string `yaml:"app"` } `yaml:"selector"` Ports []struct { Name string `yaml:"name"` Port int `yaml:"port"` TargetPort int `yaml:"targetPort"` NodePort int `yaml:"nodePort,omitempty"` } `yaml:"ports"` } `yaml:"spec"` }
YAML 파일을 이 구조체로 역마샬링하려면 다음을 사용합니다. 다음 코드:
var service Service err := yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) } fmt.Print(service.Metadata.Name)
위 내용은 Go에서 복잡한 YAML 파일을 효과적으로 구문 분석하려면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!