Maison > développement back-end > Golang > Pourquoi puis-je appeler des méthodes de pointeur sur des valeurs autres que des pointeurs dans Go ?

Pourquoi puis-je appeler des méthodes de pointeur sur des valeurs autres que des pointeurs dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-30 13:00:18
original
976 Les gens l'ont consulté

Why Can I Call Pointer Methods on Non-Pointer Values in Go?

Invocation de méthode pointeur sur des valeurs non-pointeur

Dans Go, il est possible d'invoquer des méthodes pointeur sur des valeurs non-pointeur, malgré le règle générale selon laquelle les méthodes de pointeur ne peuvent être invoquées que sur des pointeurs. Ce comportement apparemment contradictoire peut s'expliquer par le concept de déréférencement automatique du pointeur.

Dans l'extrait de code donné :

package main

import "fmt"

type car struct {
    wheels int
}

func (c *car) fourWheels() {
    c.wheels = 4
}

func main() {

    var c = car{}
    fmt.Println("Wheels:", c.wheels)
    c.fourWheels()
    fmt.Println("Wheels:", c.wheels)
}
Copier après la connexion

L'expression c.fourWheels() est un raccourci pour (&c) .fourWheels(). En effet, le récepteur de fourWheels est un pointeur et c est une valeur non-pointeur. Puisque c est adressable, le compilateur le déréférence automatiquement pour obtenir un pointeur vers la valeur de la voiture, qui est ensuite utilisée comme récepteur.

Ce comportement est explicitement indiqué dans la spécification Go :

Si x est adressable et que l'ensemble de méthodes de &x contient m, x.m() est un raccourci pour (&x).m().

Par conséquent, même si la règle générale concernant les méthodes de pointeur reste valable, le déréférencement automatique du pointeur permet l'invocation pratique de méthodes de pointeur sur des valeurs non-pointeurs dans certaines situations. Il est important de noter que ce comportement s'applique uniquement aux méthodes avec des récepteurs de pointeurs.

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