Go parse yaml file

后端 未结 4 995
慢半拍i
慢半拍i 2020-12-28 16:57

I\'m trying to parse a yaml file with Go. Unfortunately I can\'t figure out how. The yaml file I have is this:

---
firewall_network_rules:
  rule1:
    src:          


        
4条回答
  •  情歌与酒
    2020-12-28 16:58

    If you're working with google cloud or kubernetes more specifically and want to parse a service.yaml like this:

    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
    

    Supplying a real world example so you get the hang of how nesting can be written.

    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"`
    }
    

    There's a convenient service called yaml-to-go https://yaml.to-go.online/ which converts YAML to go structs, just input your YAML into that service and you get an autogenerated struct.

    And last unmarshal as a previous poster wrote:

    var service Service
    
    err = yaml.Unmarshal(yourFile, &service)
    if err != nil {
        panic(err)
    }
    
    fmt.Print(service.Metadata.Name)
    

提交回复
热议问题