在 Go 中解析 YAML 文件
在 Go 中解析 YAML 文件涉及利用 gopkg.in/yaml.v2 提供的 YAML 库。提供的代码旨在解析具有嵌套键值对的 YAML 文件,如下所示:
firewall_network_rules: rule1: src: blablabla-host dst: blabla-hostname
但是,在尝试解析没有附带值的键值对时会出现问题。实现的结构体没有定义这些值,导致解析期间出错。
要解决此问题,请考虑合并真实的 YAML 示例,例如来自 Google Cloud 或 Kubernetes 的 service.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