Go에서 YAML 파일을 구문 분석하려면 데이터 구조와 이를 표현하는 데 적합한 데이터 유형을 이해해야 합니다.
다음 YAML 파일을 고려하세요. 방화벽 네트워크 규칙 사용:
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
이 파일을 구문 분석하기 위해 YAML 콘텐츠를 나타내는 Config 구조체를 정의합니다.
type Config struct { Firewall_network_rules map[string][]string }
그런 다음 yaml 패키지를 사용하여 다음을 수행합니다. YAML 파일을 Config 구조체로 역마샬링합니다.
func main() { filename, _ := filepath.Abs("./fruits.yml") yamlFile, err := ioutil.ReadFile(filename) if err != nil { panic(err) } var config Config err = yaml.Unmarshal(yamlFile, &config) if err != nil { panic(err) } fmt.Printf("Value: %#v\n", config.Firewall_network_rules) }
이 접근 방식은 YAML 파일이 다음을 사용하기 때문에 작동합니다. Config 구조체에 해당하는 중첩 맵 구조.
Kubernetes 서비스 매니페스트와 같이 더 복잡한 YAML 파일을 구문 분석하기 위해 더 복잡한 YAML 파일을 생성합니다. struct:
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 파일을 다음으로 역마샬링합니다. struct:
var service Service err = yaml.Unmarshal(yourFile, &service) if err != nil { panic(err) } fmt.Print(service.Metadata.Name)
YAML 구조와 일치하는 적절한 구조체를 사용하면 Go에서 복잡한 YAML 데이터를 효과적으로 구문 분석하고 표현할 수 있습니다.
위 내용은 Go에서 YAML 파일을 어떻게 구문 분석하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!