无法将 yaml 数组映射和解组到 golang 结构

我想将我的~/.kube/config文件解组为一个go结构。


我正在使用以下方法


func ListContexts(pathToKubeConfig string) ([]string, error) {

    type Contexts struct {

        Ctx []string `yaml:"contexts"`

        //ApiVersion string              `yaml:"apiVersion"`

    }

    var ctx []string

    var c Contexts


    file, err := ioutil.ReadFile(pathToKubeConfig)

    if err != nil {

        return nil, err

    }


    err = yaml.Unmarshal(file, &c)

    fmt.Printf("%#v\n", c.Ctx)

    return ctx, nil

}

}

众所周知,kubeconfig 文件具有以下结构:


apiVersion: v1

. . . 

contexts:

- context:

    cluster: cluster1

    user: user1

  name: context1

- context:

    cluster: cluster2

    user: user2

  name: context2

我的方法是打印:


[]string(nil)

既然context是 yaml 数组,为什么我映射到字符串数组时不起作用?


当我取消注释ApiVersion我的结构字段并尝试打印它时,它可以工作。


临摹微笑
浏览 124回答 1
1回答

慕无忌1623718

context是一个数组,但不是字符串数组。要么[]map[string]interface{}用于上下文,要么将上下文定义为结构,并使用其数组:type context struct {   Cluster string `yaml:"cluster"`   ...}type contexts struct {   Contexts []context `yaml:"contexts"`}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go