Maison > Article > développement back-end > 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!