Comment l'opérateur d'adresse exécute et l'affectation de déploiement à runtime.Object
Dans le code Kubernetes, la fonction Générer dans kubectl/run.go renvoie une liste contenant runtime.Object et une erreur. La dernière ligne de la fonction attribue l'adresse de la variable de déploiement au premier élément de la liste de retour. Runtime.Object est une interface définie dans k8s.io/apimachinery/pkg/runtime, avec les méthodes GetObjectKind et DeepCopyObject.
L'opérateur d'adresse (&) crée un pointeur vers une variable. Dans Go, le type d'un pointeur est distinct de son type de base. Cependant, la variable de déploiement est déclarée localement en tant qu'instance de extensionsv1beta1.Deployment, qui est une structure qui intègre metav1.TypeMeta. Cette intégration fournit la méthode GetObjectKind pour le déploiement et le *Deployment (pointeur vers le déploiement).
De plus, extensionsv1beta1.Deployment implémente directement la méthode DeepCopyObject, avec un récepteur de pointeur. Cela signifie que *Deployment dispose également de la méthode DeepCopyObject.
Selon la spécification Go, une interface peut stocker une valeur de n'importe quel type dont l'ensemble de méthodes est un sur-ensemble de l'interface. Dans ce cas, l'ensemble de méthodes de Déploiement inclut toutes les méthodes définies par Object, faisant du Déploiement une implémentation d'Object.
Par conséquent, puisque le déploiement est de type extensionsv1beta1.Le déploiement, le &déploiement sera de tapez *extensionsv1beta1.Deployment, qui implémente Object. Cela permet l'affectation du &déploiement à une variable de type runtime.Object, qui attend une valeur de type Object ou une implémentation de Object.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!