&deployment指针如何满足运行时对象接口
在Kubernetes代码中,kubectl/run.go中的Generate函数返回包含runtime.Object 和错误的结果列表。函数最后一行,return &deployment, nil,将局部变量deployment的地址赋值给runtime.Object类型。
deployment是一个extensionsv1beta1.Deployment类型的局部变量。该类型嵌入了metav1.TypeMeta,它有一个带有指针接收器的GetObjectKind()方法。因此,由于 Go 对嵌入方法的提升规则,指向 Deployment 的指针也有这个方法。
另外,Deployment 有一个带有指针接收器的“直接”DeepCopyObject() 方法,因此 *Deployment 的方法集包含GetObjectKind() 和 DeepCopyObject().
runtime.Object 接口需要类型来实现这两个方法。由于 *Deployment 实现了这两种方法,因此它是分配给 runtime.Object 的有效类型。
类型系统允许这种分配,因为接口类型指定了方法集。接口类型的变量可以存储任何类型的值,其方法集是接口方法集的超集。在这种情况下,*Deployment的方法集是runtime.Object的方法集的超集,因此*Deployment实现了runtime.Object.
因此,&deployment是Generate函数的有效返回值因为它通过从嵌入的*metav1.TypeMeta.
继承的方法来满足runtime.Object接口免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3