Maison > développement back-end > Golang > Aller à l'initialisation : `&` vs `new()` : quelle est la différence ?

Aller à l'initialisation : `&` vs `new()` : quelle est la différence ?

Patricia Arquette
Libérer: 2024-12-18 14:47:10
original
192 Les gens l'ont consulté

Go Initialization:  `&` vs. `new()`: What's the Difference?

Initialisation de valeur dans Go

Dans Go, utiliser & pour initialiser une valeur plutôt que d'utiliser new() peut sembler être des approches différentes, mais leur la fonctionnalité est essentiellement la même.

Illustrer l'équivalence

Considérez les extraits de code suivants :

v := &Vector{}
Copier après la connexion

et

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

Ici, Vector représente un type personnalisé. Les deux approches allouent de la mémoire pour la structure Vector et renvoient un pointeur vers la mémoire allouée.

Pour démontrer cette équivalence, comparons les types résultants :

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 cela est évident, les deux méthodes génèrent des pointeurs vers le vecteur type.

Contexte historique et préférences

Bien que les deux méthodes obtiennent le même résultat, leurs historiques respectifs peuvent influencer les préférences des développeurs. new() a été introduit plus tôt dans le développement de Go et était le seul moyen d'initialiser des pointeurs vers des types de base comme les entiers. Depuis lors, & a été ajouté comme approche plus générale qui fonctionne pour tout type.

Conclusion

En fin de compte, le choix entre & et new() est une question de préférence. Les deux approches allouent de la mémoire et renvoient un pointeur vers la mémoire allouée, ce qui donne une fonctionnalité identique.

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