"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Quelle est la différence entre la fonction \"new()\" et l'opérateur d'adresse mémoire \"&\" dans Go ?

Quelle est la différence entre la fonction \"new()\" et l'opérateur d'adresse mémoire \"&\" dans Go ?

Publié le 2024-11-08
Parcourir:421

What\'s the Difference Between the \

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 :

  • v := &Vector{} utilise l'opérateur "&" pour obtenir l'adresse d'une structure Vector vide.
  • v := new( Vector) utilise la fonction new() pour créer un pointeur vers une nouvelle structure Vector.

Analyse de type

Comme le démontre le Dans l'exemple de code fourni, l'analyse de réflexion 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é ses préoccupations concernant l'utilisation à la fois de new() et de & pour l'allocation de mémoire, car cela peut prêter à confusion.

Spécial Case

Il convient de noter que new() est la seule méthode pour 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 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 d'exigences spécifiques.

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729661717. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3