Maison  >  Article  >  développement back-end  >  La différence entre Golang Make et New

La différence entre Golang Make et New

(*-*)浩
(*-*)浩original
2019-12-03 11:19:533048parcourir

La différence entre Golang Make et New

make, nouvelles opérations

make est utilisé pour l'allocation de mémoire des types intégrés (map, slice et canal) . new est utilisé pour différents types d’allocation de mémoire. (Apprentissage recommandé : go)

La fonction intégrée new fonctionne essentiellement de la même manière que la fonction du même nom dans d'autres langues : new(T) est remplissage de valeur zéro attribué L'espace mémoire de type T et renvoie son adresse, qui est une valeur de type *T.

En termes Go, il renvoie un pointeur vers une valeur zéro nouvellement allouée de type T. Une chose est très importante :

new返回指针。

Les fonctions intégrées make(T, args) et new(T) ont des fonctions différentes. make ne peut créer que des tranches, des cartes et des canaux, et. renvoie un type T avec une valeur initiale (non nulle), pas *T. Essentiellement, ce qui différencie ces trois types est que les références aux structures de données doivent être initialisées avant utilisation.

Par exemple, une tranche est un descripteur à trois éléments contenant un pointeur vers les données (tableau interne), la longueur et la capacité ; jusqu'à ce que ces éléments soient initialisés, la tranche est nulle. Pour les tranches, les cartes et les canaux, make initialise les structures de données internes et les remplit avec les valeurs appropriées.

make返回初始化后的(非零)值。

Exemple de code :

var map1 map[string]string = make(map[string]string)
    fmt.Println(map1)
    fmt.Println(map1 == nil)

    var map2 *map[string]string = new(map[string]string)
    fmt.Println(map2)
    fmt.Println(map2 == nil)
    fmt.Println(*map2)
    fmt.Println(*map2 == nil)
    //    var map1 map[string]string
    map1["aaa"] = "AAA"
    map1["bbb"] = "BBB"
    map1["ccc"] = "CCC"
    fmt.Println(map1)
    fmt.Println(len(map1))

Sortie :

map[]
false
&map[]
false
map[]
true
map[bbb:BBB ccc:CCC aaa:AAA]
Success: process exited with code 0.

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:
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