Maison >développement back-end >Golang >Aller à l'allocation de mémoire : `new()` vs `&{}` – Quelle est la vraie différence ?
Énigme d'allocation : pointeurs new() vs "réguliers" dans Go
Dans le domaine de la programmation Go, une question se pose : existe-t-il une différence significative entre les deux segments de code suivants lors de l'allocation de mémoire pour un nouvel objet ?
Segment de code 1 :
v := &Vector{}
Segment de code 2 :
v := new(Vector)
Réponse :
Étonnamment, il il n'y a pas de différence notable entre les deux segments de code. Ils obtiennent tous deux le même résultat : créer un pointeur vers une nouvelle instance du type Vector.
Explication détaillée :
Lors de l'appel de new(Vector), le nouveau mot-clé alloue de la mémoire pour un nouvel objet Vector et renvoie un pointeur vers cet objet. De même, &Vector{} alloue également de la mémoire pour un nouvel objet Vector et renvoie un pointeur vers celui-ci.
Pour illustrer, considérons le code suivant :
package main import "fmt" import "reflect" type Vector struct { x int y int } func main() { v := &Vector{} x := new(Vector) fmt.Println(reflect.TypeOf(v)) fmt.Println(reflect.TypeOf(x)) }
Sortie :
*main.Vector *main.Vector
Comme vous pouvez le voir, v et x sont tous deux des pointeurs vers des objets vectoriels. Ils ont le même type.
Cas d'utilisation :
Bien que les deux segments de code obtiennent le même résultat, certains développeurs affirment que new est plus approprié lorsque la mémoire allouée sera immédiatement déréférencé et utilisé, car il permet d'éviter les erreurs de double déréférencement. Par exemple :
// Allocates memory and immediately dereferences it v := new(Vector).x
Conclusion :
En conclusion, le choix entre l'utilisation de la syntaxe d'allocation new et « normale » dans Go dépend uniquement de vos préférences personnelles. Les deux méthodes allouent de la mémoire et renvoient un pointeur vers l'objet nouvellement créé, offrant des fonctionnalités identiques.
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!