Pointers 我如何能?;kubernetes代码中的部署满足类型runtime.Object?

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

在Kubernetes代码中,
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
的变量中