偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《为什么解码返回结果为空》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!
问题内容我有以下代码,我想将 yaml 转换为客户端 go 数据结构并从中获取对象名称
package main
import (
"fmt"
"k8s.io/api/extensions/v1beta1"
"k8s.io/client-go/kubernetes/scheme"
)
var yml = `
apiversion: extensions/v1beta1
kind: deployment
metadata:
name: testnginx
replicas: 1
spec:
template:
metadata:
labels:
run: testnginx
spec:
containers:
- image: nginx
name: testnginx
ports:
- containerport: 8080
`
func main() {
decode := scheme.codecs.universaldeserializer().decode
obj, _, err := decode([]byte(yml), nil, nil)
if err != nil {
fmt.printf("%#v", err)
}
//fmt.printf("%#v\n", obj)
deployment := obj.(*v1beta1.deployment)
fmt.printf("%#v\n", deployment.objectmeta.name)
}
返回结果应该是testnginx,但它是空的
$ ./decode-k8s-exercise
""
不知道为什么。谢谢
解决方案
问题出在 yaml 中。 name
字段应该是 metadata
内的属性,但它们目前处于同一级别。如果您用空格缩进名称,那么它应该可以工作(这同样适用于稍后的 template
)。 relicas
也应该在 spec
内:
var yml = `
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: testnginx
spec:
replicas: 1
template:
metadata:
labels:
run: testnginx
spec:
containers:
- image: nginx
name: testnginx
ports:
- containerPort: 8080
`
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~