How the &deployment Pointer Satisfies the runtime.Object Interface
In Kubernetes code, the Generate function in kubectl/run.go returns a result list containing runtime.Object and an error. The last line of the function, return &deployment, nil, assigns the address of the local variable deployment to the runtime.Object type.
deployment is a local variable of type extensionsv1beta1.Deployment. This type embeds metav1.TypeMeta, which has a GetObjectKind() method with a pointer receiver. Therefore, a pointer to Deployment also has this method due to Go's promotion rules for embedded methods.
Additionally, Deployment has a "direct" DeepCopyObject() method with a pointer receiver, so the method set of *Deployment contains both GetObjectKind() and DeepCopyObject().
The runtime.Object interface requires types to implement these two methods. Since *Deployment implements both methods, it is a valid type to assign to runtime.Object.
The type system allows this assignment because interface types specify a method set. A variable of interface type can store a value of any type with a method set that is a superset of the interface's method set. In this case, the method set of *Deployment is a superset of the method set of runtime.Object, so *Deployment implements runtime.Object.
Therefore, &deployment is a valid return value for the Generate function because it satisfies the runtime.Object interface through method inheritance from the embedded *metav1.TypeMeta.
The above is the detailed content of How Does the `&deployment` Pointer Fulfill the `runtime.Object` Interface in Kubernetes?. For more information, please follow other related articles on the PHP Chinese website!