&deployment ポインターが runtime.Object インターフェイスを満たす方法
Kubernetes コードでは、kubectl/run.go の Generate 関数が返しますruntime.Object とエラーを含む結果リスト。関数の最後の行 return &deployment, nil は、ローカル変数deploymentのアドレスを runtime.Object 型に割り当てます。
deployment は、extensionsv1beta1.Deployment 型のローカル変数です。この型には、ポインタ レシーバを備えた GetObjectKind() メソッドがある metav1.TypeMeta が埋め込まれています。したがって、埋め込みメソッドに対する Go のプロモーション ルールにより、Deployment へのポインタにもこのメソッドがあります。
さらに、Deployment にはポインタ レシーバを備えた「直接」 DeepCopyObject() メソッドがあるため、*Deployment のメソッド セットには次のものが含まれます。 GetObjectKind() と DeepCopyObject() の両方。
runtime.Object インターフェイスには、これら 2 つのメソッドを実装するための型が必要です。 *Deployment は両方のメソッドを実装しているため、runtime.Object に割り当てるのに有効な型です。
インターフェイス型がメソッド セットを指定するため、型システムではこの割り当てが許可されています。インターフェイス型の変数は、インターフェイスのメソッド セットのスーパーセットであるメソッド セットを持つ任意の型の値を格納できます。この場合、*Deployment のメソッド セットは runtime.Object のメソッド セットのスーパーセットであるため、*Deployment は runtime.Object を実装します。
したがって、&deployment は Generate 関数の有効な戻り値です。埋め込まれた *metav1.TypeMeta.
からのメソッド継承を通じて runtime.Object インターフェイスを満たすためです。以上が`&deployment` ポインタは Kubernetes の `runtime.Object` インターフェイスをどのように実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。