Comprendre l'utilisation du retour d'adresse dans les constructeurs Go : nouveau ou retour direct
Contrairement à d'autres langages qui fournissent des constructeurs explicites, Go utilise un Fonction "Nouvelle" à la place des constructeurs. Cependant, pourquoi est-il courant de renvoyer l'adresse (&f) dans la fonction "Nouveau" de Go, plutôt que de renvoyer directement l'objet File ?
Différences entre l'adresse et les retours directs
La syntaxe de Go permet de renvoyer soit des valeurs (non-pointeurs), soit des pointeurs, laissant la décision au développeur. En règle générale, un pointeur est renvoyé lorsque la valeur est plus utile qu'une seule. C'est particulièrement le cas si la valeur renvoyée :
1. Possède plusieurs méthodes avec des récepteurs de pointeur :
Le retour d'un pointeur permet d'enchaîner les appels de méthode directement sur l'objet renvoyé, même si les méthodes prennent un récepteur de pointeur. Cela élimine le besoin de stocker la valeur renvoyée dans une variable et d'appeler manuellement les méthodes.
2. Est stocké dans des structures de données non adressables :
Certaines structures de données, telles que les cartes, ne prennent pas en charge l'adressage direct des valeurs. Le renvoi d'un pointeur contourne cette limitation, permettant des appels de méthode sur la valeur stockée dans la structure de données.
3. Une grande structure est-elle fréquemment transmise :
Les pointeurs sont avantageux pour les grandes structures qui seront fortement transmises, car ils optimisent l'utilisation de la mémoire et les performances.
Exemple de comparaison :
Considérons une structure simple avec une méthode qui prend un pointeur récepteur :
type My int func (m *My) Str() string { return strconv.Itoa(int(*m)) } func createMy(i int) My { return My(i) } // Direct return func createMyPtr(i int) *My { return (*My)(&i) } // Address return
Lors de la tentative d'utilisation de la valeur de retour directe :
fmt.Println(createMy(12).Str())
Une erreur se produit : "impossible d'appeler la méthode du pointeur sur createMy(12)". Cependant, avec l'adresse return :
fmt.Println(createMyPtr(12).Str())
L'appel de méthode réussit sans erreur.
Conclusion :
La décision de renvoyer ou non un le pointeur ou la valeur directement dans la fonction "Nouveau" de Go est basé sur l'utilisation prévue de l'objet renvoyé. Les pointeurs offrent des avantages lorsqu'il s'agit de méthodes avec des récepteurs de pointeurs, des structures de données non adressables ou des structures volumineuses qui seront fréquemment transmises.
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!