无法解组Golang中的数组字段

问题描述

我正试图取消对以下flux HelmRelease文件的保护。

apiVersion: helm.fluxcd.io/v1
kind: HelmRelease
Metadata:
  annotations:
    fluxcd.io/automated: 'false'
    fluxcd.io/tag.ats: glob:*
  name: ats
  namespace: myns
spec:
  chart:
    git: git@github.com:reponame/project.git
    path: charts/path1/path1/myapp
    ref: master
  releaseName: foobar
  values:
    allowAllEgress: true
    recycleApp: true
    hooks:
      slackChannel: https://hooks.slack.com/services/something/somethingelse/

这是我的模特

type HelmReleaseValues struct {
    AllowAllEgress bool `yaml:"allowAllEgress"`
    RecycleApp     bool `yaml:"recycleApp"`
    Hooks          `yaml:"hooks"`
}

type Hooks struct {
    SlackChannel string `yaml:"slackChannel"`
}

type Values struct {
    HelmReleaseValues `yaml:"values"`
    ReleaseName       string `yaml:"releaseName"`
    Chart             `yaml:"chart"`
}

type Spec struct {
    Values `yaml:"spec"`
}

问题在于allowAllEgressrecycleApp字段已被解组。

但是我的结构中的Hooks字段为空。

在结构建模/标记中我做错了什么?

修改:这是我的代码

package main

import (
    "fmt"
    "io/IoUtil"
    "os"

    "github.com/davecgh/go-spew/spew"
    "gopkg.in/yaml.v3"
)

const ExitCodeCmdErr = 1

func main() {
    rawYaml := parseHelmReleaseFile("myfile.yaml")
    spew.Dump(rawYaml)
}

func parseHelmReleaseFile(fileName string) Spec {

    var v Spec

    yamlFile,err := IoUtil.ReadFile(fileName)
    if err != nil {
        fmt.Printf("yaml file err   #%v ",err)
        os.Exit(ExitCodeCmdErr)
    }

    err = yaml.Unmarshal(yamlFile,&v)
    if err != nil {
        fmt.Printf("Unmarshal: %v",err)
        os.Exit(ExitCodeCmdErr)
    }

    return v
}

我正在运行程序并为输出进行grepping(实际的头盔发布文件很大)

▶ go clean && gb .             
~/Desktop/yamltutorial
./foobar | grep -i hooks -A 3
--
   Hooks: (main.Hooks) {
    SlackChannel: (string) ""
   }
  },

解决方法

您没有Chart结构

type Chart struct {
    Git  string `yaml:"git"`
    Path string `yaml:"path"`
    Ref  string `yaml:"ref"`
}

添加并获得以下输出

{Values:{HelmReleaseValues:{AllowAllEgress:true RecycleApp:true Hooks:{SlackChannel:https://hooks.slack.com/services/something/somethingelse/}} ReleaseName:foobar Chart:{Git:git@github.com:reponame/project.git Path:charts/path1/path1/myapp Ref:master}}}

带有完整代码的游乐场文件。

https://play.golang.org/p/vCnjApr6gI9