Maison >développement back-end >Golang >Go Maps : `var m = map[string]int{}` vs `var m = make(map[string]int)` : quelle est la différence ?

Go Maps : `var m = map[string]int{}` vs `var m = make(map[string]int)` : quelle est la différence ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-17 20:13:10848parcourir

Go Maps: `var m = map[string]int{}` vs. `var m = make(map[string]int)`: What's the Difference?

Initialisation de cartes : découvrir les différences entre un raccourci et une création explicite

La question se pose : qu'est-ce qui différencie nettement les deux approches suivantes pour initialiser des cartes dans Allez :

var m = map[string]int{}

et

var m = make(map[string]int)

Le premier est-il simplement une méthode concise pour initialiser rapidement les champs ? Y a-t-il des implications potentielles en termes de performances à prendre en compte ?

Disséquer les différences

La distinction entre ces deux syntaxes réside dans leurs implications pour les cartes non vides. Alors que make crée systématiquement une carte vide, le premier exemple exploite une fonctionnalité unique des littéraux de carte : la possibilité d'établir directement des cartes non vides. Par exemple :

m := map[bool]string{false: "FALSE", true: "TRUE"}

Pour généraliser votre exemple, un littéral de carte non vide sans paires de valeurs initiales, comme celui-ci :

m := map[T]U{}

est sémantiquement identique à l'utilisation explicite de make :

m := make(map[T]U)

Cependant, make offre un avantage supplémentaire : il permet de spécifier une capacité initiale pour la carte qui dépasse le nombre d'éléments initialement attribués. Prenons cet exemple :

m := make(map[T]U, 50)

Cette syntaxe alloue suffisamment d'espace dans la carte pour accueillir jusqu'à 50 éléments. En réservant de manière proactive la mémoire, les allocations futures peuvent être minimisées lors de l'anticipation de la croissance de la carte.

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