Maison  >  Article  >  développement back-end  >  Parlons de la méthode d'initialisation de la structure des données dans GO (avec des exemples de code)

Parlons de la méthode d'initialisation de la structure des données dans GO (avec des exemples de code)

藏色散人
藏色散人avant
2023-01-03 16:32:283372parcourir

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.

Comment initialiser la structure des données lors du codage à l'aide de Golang ?

GO fournit 2 mots-clés pour initialiser la structure des données

  • new
  • make

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

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 :

  • slice slice.
  • map hash table
  • channel channel

Par exemple, lors de l'initialisation, nous pouvons écrire comme ceci

  • Initialize a slice et renseigner la valeur len et la valeur cap En plus de ces deux valeurs, la. La structure de données sous-jacente de la tranche a également un pointeur vers un tableau sous-jacent
  • Initialisez une carte. La couche inférieure de la carte est un pointeur de structure pointant vers un hmap. Si vous êtes intéressé par les membres spécifiques de xdm dans la structure, vous pouvez le faire. pouvez lire mon article historique
  • Initialiser un canal ch. Ce ch est un pointeur de structure pointant vers un hchan. Vous pouvez également lire mon article historique pour plus de détails
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

Parlons de la méthode dinitialisation de la structure des données dans GO (avec des exemples de code) 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

nouveau

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 :

  • Personnaliser une structure avec 2 membres, âge et nom
  • Utiliser new pour initialiser T et renvoyer un pointeur vers la structure
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

Jetez un oeil dans la description du nouveau code source

Parlons de la méthode dinitialisation de la structure des données dans GO (avec des exemples de code)

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

La différence entre make et new

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer