Maison > Article > développement back-end > Quelle est la différence entre la fonction \'new()\' et l'opérateur d'adresse mémoire \'&\' dans Go ?
Les différences entre les opérateurs new() et "&"
Dans Go, la fonction new() et l'adresse mémoire "&" L’opérateur est tous deux utilisés pour allouer de la mémoire. Cependant, il existe quelques différences subtiles entre leur utilisation.
Comparaison des fonctionnalités
Les opérateurs new() et & renvoient un pointeur vers une adresse mémoire nouvellement allouée. Cependant, ils diffèrent par leur syntaxe :
Analyse de type
Comme le démontre l'exemple de code fourni, la réflexion L'analyse montre que &Vector{} et new(Vector) renvoient des pointeurs du même type, car tous deux sont des pointeurs vers des instances de la structure Vector.
Confusion historique
La liste de diffusion Go a déjà évoqué des préoccupations concernant l'utilisation à la fois de new() et de & pour l'allocation de mémoire, car cela peut prêter à confusion.
Cas particulier
Il convient de le noter que new() est la seule méthode permettant d'obtenir un pointeur vers un type de base sans nom, tel qu'un entier. Cela peut être vu dans l'exemple suivant :
p := new(int) // valid p := &int{0} // invalid
Préférence et utilisation
En fin de compte, le choix entre utiliser new() et & pour l'allocation de mémoire est en grande partie une question de question de préférence personnelle. Les deux méthodes ont les mêmes fonctionnalités et produisent les mêmes résultats. Cependant, il est important d'être conscient des différences subtiles entre les deux opérateurs et de les utiliser de manière appropriée en fonction des exigences spécifiques.
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!