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 pointeur récepteur (*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 la prise d'adresse automatique de Go. Considérons 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 transmise à 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.
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!