"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment Go gère-t-il les récepteurs de pointeurs et de valeurs dans les méthodes ?

Comment Go gère-t-il les récepteurs de pointeurs et de valeurs dans les méthodes ?

Publié le 2024-11-16
Parcourir:883

How Does Go Handle Pointer and Value Receivers in Methods?

Pointeurs Go : types de récepteurs et de valeurs

Dans Go, les pointeurs sont indispensables pour comprendre la programmation orientée objet et la gestion de la mémoire. Lorsqu'il s'agit de pointeurs, il est crucial de saisir la distinction entre les types de récepteurs dans les méthodes.

L'exemple Go Tour que vous avez fourni illustre ce concept :

type Vertex struct {
    X, Y float64
}

func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X   v.Y*v.Y)
}

func main() {
    v := &Vertex{3, 4}
    fmt.Println(v.Abs())
}

Ici, la méthode Abs reçoit un récepteur pointeur (*Vertex). Cependant, vous avez remarqué que vous pouviez également utiliser un récepteur de valeur (Vertex) et obtenir le même résultat. Comment est-ce possible ?

Types de récepteur et de valeur

Go autorise les méthodes dérivées. Une méthode avec un récepteur de pointeur peut hériter d’une méthode avec un récepteur de valeur. Cela signifie qu'une méthode de réception de valeur, par exemple func (v Vertex) Abs() float64, génère automatiquement une méthode de réception de pointeur :

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) }  // GENERATED METHOD

Prise d'adresse automatique

Une autre fonctionnalité importante est Go's prise d'adresse automatique. Considérez le code suivant sans récepteur de pointeur explicite :

func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X v.Y*v.Y) }
func main() {
    v := Vertex{3, 4}
    v.Abs()
}

Go prend implicitement l'adresse de la valeur passée à la méthode Abs. Cela équivaut à ce qui suit :

vp := &v
vp.Abs()

Conclusion

Dans Go, comprendre le rôle des types de récepteurs et la fonction de prise d'adresse automatique est crucial pour une utilisation efficace du pointeur. Vous pouvez dériver des méthodes de réception de pointeurs à partir de méthodes de réception de valeurs, et Go transmettra automatiquement l'adresse des valeurs sans utiliser explicitement de pointeurs.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3