&deployment 如何满足 Kubernetes 代码中的类型 runtime.Object
Kubernetes 代码的 kubectl/run.go 文件中,Generate 函数生成一个类型为runtime.Object的值列表。该函数的最后一行将*extensionsv1beta1.Deployment 类型的值分配给第一个结果变量,该变量的类型注释为runtime.Object。这个赋值如何满足类型约束?
嵌入元和提升方法
部署变量是类型为extensionsv1beta1.Deployment的局部变量。 Extensionsv1beta1.Deployment 嵌入了metav1.TypeMeta,其中包括 GetObjectKind() 方法。由于extensionsv1beta1.Deployment嵌入了此类型,因此extensionsv1beta1.Deployment和*extensionsv1beta1.Deployment(指向extensionsv1beta1.Deployment的指针)都提升了此方法的版本。同样,extensionsv1beta1.Deployment 也有一个 DeepCopyObject() 方法。
方法集和接口实现
runtime.Object 是一个接口类型,指定方法集,包括GetObjectKind() 和 DeepCopyObject()。接口类型可以存储任何类型的值,其方法集是接口方法集的超集。该类型据说实现了接口。
指针接收器方法
GetObjectKind() 和 DeepCopyObject() 的升级版本具有指针接收器。这意味着 *extensionsv1beta1.Deployment 和 &deployment (指向部署变量的指针)在其方法集中都有所需的方法。
类型可分配性
因为 &deployment 实现所有runtime.Object需要的方法,都可以赋值给runtime.Object类型的变量。这与Go类型系统规则一致,即接口类型变量可以存储实现该接口的任何类型的值。
因此,&deployment满足runtime.Object的类型要求,因为:
以上是'*extensionsv1beta1.Deployment”变量如何满足 Kubernetes 中的'runtime.Object”类型约束?的详细内容。更多信息请关注PHP中文网其他相关文章!