我想解码我的 ~/.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
我的结构的字段并尝试打印它,它可以工作。
最佳答案
context
是一个数组,但不是字符串数组。使用 []map[string]interface{}
对于上下文,或将上下文定义为结构,并使用其数组:
type context struct {
Cluster string `yaml:"cluster"`
...
}
type contexts struct {
Contexts []context `yaml:"contexts"`
}
关于go - 无法将 yaml 数组映射和解码到 golang 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62135573/