Cet article vous présentera la méthode d'initialisation de la structure de données dans le langage GO. GO fournit 2 mots-clés pour initialiser la structure de données. Voyons comment l'utiliser ~ J'espère que cela sera utile à tout le monde.
GO fournit 2 mots-clés pour initialiser la structure des données
Mais parfois j'utilise aussi des accolades pour initialiser directement, par exemple :
name := []string{"xiaomotong","bob","marry"}
Dans la situation ci-dessus, les valeurs Les données à renseigner ont été clairement définies lors de l'initialisation. Vous pouvez utiliser la méthode ci-dessus. Cependant, dans la plupart des cas, les données sont encore inconnues lors de l'initialisation. La plupart du temps, les deux méthodes ci-dessus seront toujours utilisées. .Méthode
make est un mot-clé fourni par golang. Il est principalement utilisé pour initialiser les structures de données intégrées. Les types de données qui peuvent être initialisés par make sont :
Par exemple, lors de l'initialisation, nous pouvons écrire comme ceci
strs := make([]string, 0, 10)myMap := make(map[string]string, 10)ch := make(chan struct{}, 10)
Nous regardons l'explication du code source de make et nous pouvons. voyez que make prend en charge la création et l'initialisation des 3 types
ci-dessus
Selon l'explication, nous savons que le type de la valeur de retour de make est cohérent avec le type des paramètres renseignés. Nous remplissons le type de tranche, puis la valeur de retour est le type de tranche. Remplir les valeurs de retour correspondantes d'autres types est également ce que nous attendons Type, il n'y a rien de mal à cela
Donc. pourquoi est-il nécessaire d'utiliser new alors qu'il y a make pour initialiser la structure de données ?
Attention, Fat Fish peut voir que, comme mentionné précédemment, make ne convient que pour initialiser les structures de données intégrées fournies par golang. Pour les structures de données personnalisées, il est étiré. Pour le moment, vous avez encore besoin de new. prendre soin des choses
L'initialisation de la structure de données avec new peut s'écrire comme ceci :
type T struct{ age int name string}func main(){ t := new(T) fmt.Println("t.name == ",t.name) fmt.Println("t.age == ",t.age)}
Effet d'exécution du programme Comme suit :
# go run main.got.name ==t.age == 0
Effectivement, la structure des données a été initialisée pour moi, mais les données sont toutes des valeurs nulles
Bien sûr, nous pouvons aussi écrire comme ceci :
func main(){ a := new(int) fmt.Println("a == ",a) fmt.Println("*a == ",*a)}
L'effet d'exécution du programme est la suivante :
# go run main.goa == 0xc420018078 *a == 0
Selon les résultats de l'exécution du programme, nous savons que new renvoie un pointeur, et la valeur correspondante à l'adresse mémoire pointée par ce pointeur est une valeur zéro de ce type
le code source de Golang dit que new Le premier paramètre est un type de données, pas une valeur, et la valeur de retour de new est un pointeur qui alloue de la mémoire de valeur nulle en fonction du paramètre tapez
Par conséquent, la structure de données que nous avons vue ci-dessus à partir de new, les données imprimées Ce sont toutes des valeurs nulles des types correspondants
Enfin, trions la différence entre make et new pour approfondir l'impression
make ne peut être utilisé que pour initialiser les types de données intégrés
slice
map
chan
Et new peut allouer tout type de données (y compris les données personnalisées types)
make renvoie une référence, qui est le type Type, et new renvoie un pointeur, qui est le type *Type de
【Recommandation associée : Tutoriel vidéo Go】
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!