kubernetes学习笔记----- Go语言中structTag

在读kubernetes源码的时候,读到https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/extensions/types.go   k8s的type的时候,遇到这样一段代码,

// represents a scaling request for a resource.
type Scale struct {
	unversioned.TypeMeta `json:",inline"`
	// Standard object metadata; More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata.
	api.ObjectMeta `json:"metadata,omitempty"`

	// defines the behavior of the scale. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status.
	Spec ScaleSpec `json:"spec,omitempty"`

	// current status of the scale. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status. Read-only.
	Status ScaleStatus `json:"status,omitempty"`
}

然后后面的 `` 里面的 json字符串,我就不明白了


这是Go语言的structTag 


1 干什么用的? 

如果希望手动配置结构体的成员和JSON字段的对应关系,可以在定义结构体的时候给成员打标签:

使用omitempty熟悉,如果该字段为nil或0值(数字0,字符串"",空数组[]等),则打包的JSON结果不会有这个字段。


2 怎么用啊 ?   http://blog.csdn.net/tiaotiaoyly/article/details/38942311点击打开链接

 type Message struct {
	Name string `json:"msg_name"`       // 对应JSON的msg_name
	Body string `json:"body,omitempty"` // 如果为空置则忽略字段
	Time int64  `json:"-"`              // 直接忽略字段
}
var m = Message{
	Name: "Alice",
	Body: "",
	Time: 1294706395881547000,
}
data, err := json.Marshal(m)
if err != nil {
	fmt.Printf(err.Error())
	return
}
fmt.Println(string(data))

Output:
{"msg_name":"Alice"}


你可能感兴趣的:(云计算)