Maison > développement back-end > Golang > Aller à l'allocation de mémoire : `new()` vs `&{}` – Quelle est la vraie différence ?

Aller à l'allocation de mémoire : `new()` vs `&{}` – Quelle est la vraie différence ?

Mary-Kate Olsen
Libérer: 2024-12-16 22:15:18
original
942 Les gens l'ont consulté

Go Memory Allocation: `new()` vs `&{}` – What's the Real Difference?

É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{}
Copier après la connexion

Segment de code 2 :

v := new(Vector)
Copier après la connexion

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))
}
Copier après la connexion

Sortie :

*main.Vector
*main.Vector
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal