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

La différence entre Golang Make et New

(*-*)浩
Libérer: 2019-12-03 11:19:53
original
3090 Les gens l'ont consulté

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返回指针。
Copier après la connexion

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返回初始化后的(非零)值。
Copier après la connexion

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

Sortie :

map[]
false
&map[]
false
map[]
true
map[bbb:BBB ccc:CCC aaa:AAA]
Success: process exited with code 0.
Copier après la connexion

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal