Maison  >  Article  >  développement back-end  >  Comment une variable `*extensionsv1beta1.Deployment` satisfait-elle à la contrainte de type `runtime.Object` dans Kubernetes ?

Comment une variable `*extensionsv1beta1.Deployment` satisfait-elle à la contrainte de type `runtime.Object` dans Kubernetes ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 16:11:291018parcourir

How does a `*extensionsv1beta1.Deployment` variable satisfy the `runtime.Object` type constraint in Kubernetes?

Comment le &déploiement satisfait Tapez runtime.Object dans le code Kubernetes

Dans le fichier kubectl/run.go du code Kubernetes, la fonction Générer génère une liste de valeurs de type runtime.Object. La dernière ligne de la fonction attribue une valeur de type *extensionsv1beta1.Deployment à la première variable de résultat, dont le type est annoté comme runtime.Object. Comment cette affectation satisfait-elle à la contrainte de type ?

Méta intégrées et méthodes promues

La variable de déploiement est une variable locale de type extensionsv1beta1.Deployment. extensionsv1beta1.Deployment intègre metav1.TypeMeta, qui inclut une méthode GetObjectKind(). Étant donné que extensionsv1beta1.Deployment intègre ce type, extensionsv1beta1.Deployment et *extensionsv1beta1.Deployment (pointeurs vers extensionsv1beta1.Deployment) ont promu des versions de cette méthode. De même, extensionsv1beta1.Deployment possède également une méthode DeepCopyObject().

Ensembles de méthodes et implémentation d'interface

runtime.Object est un type d'interface qui spécifie un ensemble de méthodes, notamment GetObjectKind() et DeepCopyObject(). Un type d'interface peut stocker une valeur de n'importe quel type avec un ensemble de méthodes qui est un sur-ensemble de l'ensemble de méthodes de l'interface. On dit que ce type implémente l'interface.

Méthodes de récepteur de pointeur

Les versions promues de GetObjectKind() et DeepCopyObject() ont des récepteurs de pointeur. Cela signifie que *extensionsv1beta1.Deployment et &deployment (le pointeur vers la variable de déploiement) ont les méthodes requises dans leurs ensembles de méthodes.

Assignabilité des types

Parce que &deployment implémente toutes les méthodes requises de runtime.Object, il peut être affecté à une variable de type runtime.Object. Ceci est cohérent avec la règle système de type Go selon laquelle une variable de type d'interface peut stocker une valeur de n'importe quel type qui implémente l'interface.

Par conséquent, &le déploiement satisfait à l'exigence de type de runtime.Object car :

  • extensionsv1beta1.Deployment intègre metav1.TypeMeta et a promu les méthodes GetObjectKind() et DeepCopyObject().
  • Les pointeurs vers extensionsv1beta1.Deployment ont également ces méthodes promues.
  • &deployment est un pointeur à extensionsv1beta1.Deployment, qui implémente runtime.Object.
  • Le système de type Go permet l'attribution de valeurs qui implémentent une interface à des variables de ce type d'interface.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn