Dans le code kubectl/run.go de Kubernetes, la fonction Generate renvoie une liste de résultats qui inclut deux types : runtime.Object et erreur. Cependant, la dernière ligne de la fonction est return &deployment, nil, ce qui soulève dans un premier temps la question de savoir comment &deployment peut satisfaire le type runtime.Object.
runtime.Object est un interface définie dans le package k8s.io/apimachinery/pkg/runtime. Il représente un objet abstrait dans l'API Kubernetes. Pour implémenter l'interface, un type doit avoir les méthodes suivantes :
Dans ce cas, le déploiement est une variable locale de type extensionsv1beta1.Deployment, qui est un type d'API Kubernetes. extensionsv1beta1.Deployment étend metav1.TypeMeta, qui fournit la méthode GetObjectKind(). De plus, extensionsv1beta1.Deployment implémente également directement la méthode DeepCopyObject().
L'opérateur & dans Go crée un pointeur vers la variable. Les pointeurs ont un type distinct de leur type de base. Cependant, dans ce cas :
Selon la spécification Go, 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'interface. Dans ce cas, l’ensemble de méthodes de *extensionsv1beta1.Deployment est un sur-ensemble de l’ensemble de méthodes de runtime.Object. Par conséquent, le &déploiement peut être affecté à une variable de type runtime.Object, satisfaisant le type de retour de la fonction Generate.
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!