Pointers 我如何能?;kubernetes代码中的部署满足类型runtime.Object?
在Kubernetes代码中,Pointers 我如何能?;kubernetes代码中的部署满足类型runtime.Object?,pointers,go,methods,interface,kubernetes,Pointers,Go,Methods,Interface,Kubernetes,在Kubernetes代码中,Generate函数具有以下两种类型的结果列表: runtime.Object, error 函数的最后一行是: return &deployment, nil 导入运行时: k8s.io/apimachinery/pkg/runtime 我通过在import语句上运行go-get获得了runtime,对象在接口中定义。go: type Object interface { GetObjectKind() schema.ObjectKind
Generate
函数具有以下两种类型的结果列表:
runtime.Object, error
函数的最后一行是:
return &deployment, nil
导入运行时:
k8s.io/apimachinery/pkg/runtime
我通过在import语句上运行go-get
获得了runtime
,对象在接口中定义。go
:
type Object interface {
GetObjectKind() schema.ObjectKind
DeepCopyObject() Object
}
(我在网上找到了相同的代码。)
address运算符创建一个指针。。。更具体地说,Go规范规定:
对于类型为T的操作数x,地址操作&x生成一个类型为*T到x的指针
和指针:
指针类型表示指向给定类型变量的所有指针集,称为指针的基类型
&deployment
如何满足运行时.Object
类型
到目前为止,我最好的猜测是deployment
实现了runtime.Object
接口,并将&deployment
映射到runtime.Object
满足:
T是一种接口类型,x实现T
在这方面,映射到结果列表类型的return语句等价于赋值。这是正确的吗?如果没有,规范或文档中是否有其他部分对此进行了解释?
deployment
是一个局部变量,其声明:
deployment := extensionsv1beta1.Deployment{
// ...
}
其中导入的扩展v1beta1
:
import (
// ...
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
// ...
)
博士。其定义是:
type Deployment struct {
metav1.TypeMeta `json:",inline"`
// ...other fields...
}
它嵌入了一个带有指针接收器的方法。这意味着指向部署的指针也有此方法,因为
给定结构类型S
和定义类型T
,提升的方法包括在结构的方法集中,如下所示:
- 如果
包含一个嵌入字段S
,则T
和S
的方法集都包括使用接收方*S
的提升方法方法集T
还包括与接收者*S
*T
部署
有一个“直接”方法,同样是指针接收器。因此,*部署的
包含此方法
最后一句话
接口类型指定被调用的接口接口类型的变量可以使用作为接口的任何超集的方法集存储任何类型的值。这种类型被称为实现接口
这意味着*部署
的方法集拥有对象
定义的所有方法,或者换句话说:*部署
的方法集是对象
方法集的超集,因此*部署
实现对象
deployment
属于extensionsv1beta1.deployment
,这意味着&deployment
属于*extensionsv1beta1.deployment
类型,我们在上面展示了它实现了对象
;因此,可以将值&deployment
分配给或存储在类型为Object
的变量中