Go で YAML ファイルを効果的に解析する
Go で YAML ファイルを正確に解析する方法を理解することは、さまざまなアプリケーションにとって重要です。明確に定義された Go 構造を使用すると、YAML データを効率的に操作できます。
問題ステートメント
クエリで、次の YAML ファイルを解析できないと説明しました。 using Go:
--- firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname ...
さらに、次の Go を利用しようとしましたcode:
type Config struct { Firewall_network_rules map[string][]string } ... err = yaml.Unmarshal(yamlFile, &config)
ただし、このアプローチではエラーが発生しました。これは、src と dst のキーと値のペアに対応する構造が不足している可能性があります。
解決策
YAML ファイルがリストで構成されている場合、次のアプローチは十分です:
--- firewall_network_rules: rule1: - value1 - value2 ...
ただし、提供したサンプル service.yaml など、より複雑な YAML 構造の場合:
apiVersion: v1 kind: Service ...
ネストされた構造に一致するカスタム Go 構造を定義する必要があります。 YAML の構造。例:
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"` }
Go 構造を定義したら、yaml.Unmarshal() 関数を使用して YAML データをこれらの構造に解析できます。例:
var service Service err = yaml.Unmarshal(yourFile, &service)
これらの手法に従うことで、YAML ファイルを効果的に解析し、Go アプリケーションでデータを利用できます。 YAML ファイルの特定の構造に一致するように Go 構造を調整することを忘れないでください。
以上がGo で複雑な YAML ファイルを効果的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。