登录
首页 >  Golang >  Go问答

为什么解码返回结果为空

来源:stackoverflow

时间:2024-03-30 14:36:29 437浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《为什么解码返回结果为空》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我有以下代码,我想将 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的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>