Maison > développement back-end > Golang > Comment Go gère-t-il les méthodes et les pointeurs lorsque le type de récepteur et le type de valeur ne correspondent pas ?

Comment Go gère-t-il les méthodes et les pointeurs lorsque le type de récepteur et le type de valeur ne correspondent pas ?

Barbara Streisand
Libérer: 2024-11-09 04:08:01
original
506 Les gens l'ont consulté

How does Go handle methods and pointers when the receiver type and the value type don't match?

Pointeurs en Golang : une explication complète

Dans le Tour of Go, il est mentionné que les pointeurs sont utilisés pour implémenter des méthodes sur des valeurs. Cependant, que se passe-t-il si nous déclarons une méthode avec un récepteur non-pointeur mais tentons de l'utiliser sur une valeur de pointeur, ou vice versa ?

La réponse réside dans deux règles fondamentales du langage Go :

Dérivation de méthode :
Go permet de dériver des méthodes à partir de méthodes existantes. Dans votre exemple, la méthode func (v Vertex) Abs() float64 est dérivée de la méthode func (v *Vertex) Abs() float64. Cela signifie que lorsque vous déclarez l'ancienne méthode, une nouvelle implémentation est automatiquement générée, qui appelle essentiellement la méthode d'origine avec un pointeur vers le récepteur :

func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X+v.Y*v.Y) }
func (v Vertex) Abs() float64 { return Vertex.Abs(*v) } // Automatically generated
Copier après la connexion

Par conséquent, que vous déclariez ou non func (v * Vertex) Abs() ou func (v Vertex) Abs(), dans les deux cas, la méthode générée est appelée.

Adresse automatique Prendre :
Go peut générer automatiquement un pointeur vers une variable. Dans le cas suivant, l'expression v.Abs() se résout en code :

vp := &v
vp.Abs()
Copier après la connexion

Cela signifie que lorsque vous transmettez une valeur à une méthode qui attend un pointeur et que Go ne peut pas automatiquement dériver la méthode d'un existant, le compilateur générera un pointeur vers la valeur puis appellera la méthode sur le pointeur.

En résumé, Go suit ces règles pour gérer les pointeurs et méthodes :

  • Les méthodes avec des récepteurs sans pointeur peuvent être dérivées de méthodes avec des récepteurs de pointeur, et la méthode dérivée appellera la méthode d'origine avec un pointeur vers le récepteur.
  • If Go ne peut pas automatiquement dériver une méthode à partir d'une méthode existante, elle générera un pointeur vers la valeur et appellera la méthode sur le pointeur.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal