Maison >développement back-end >Golang >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 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 13:37:01331parcourir

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 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!

Déclaration:
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