Maison > développement back-end > Golang > Que sont les cartes dans Go? Comment les créez-vous et les utilisez-vous?

Que sont les cartes dans Go? Comment les créez-vous et les utilisez-vous?

Robert Michael Kim
Libérer: 2025-03-19 12:20:33
original
778 Les gens l'ont consulté

Que sont les cartes dans Go? Comment les créez-vous et les utilisez-vous?

Les cartes dans GO sont un type de données associatif intégré qui vous permet de stocker des paires de valeurs clés. Ils sont mis en œuvre sous forme de tables de hachage, offrant un accès efficace aux valeurs qui y sont stockées. Les cartes ne sont pas ordonnées, ce qui signifie que l'ordre des clés et des valeurs peut changer pendant l'exécution du programme.

Pour créer une carte en Go, vous utilisez la fonction make avec le mot clé map . La syntaxe pour déclarer une carte est la suivante:

 <code class="go">myMap := make(map[keyType]valueType)</code>
Copier après la connexion

Ici, keyType est le type des clés, et valueType est le type des valeurs. Par exemple, pour créer une carte des chaînes aux entiers:

 <code class="go">ages := make(map[string]int)</code>
Copier après la connexion

Vous pouvez également initialiser une carte avec des valeurs au moment de la déclaration à l'aide d'un littéral composite:

 <code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, }</code>
Copier après la connexion

Pour ajouter une paire de valeurs de clé à une carte, vous utilisez la syntaxe suivante:

 <code class="go">ages["Charlie"] = 35</code>
Copier après la connexion

Pour récupérer une valeur à partir d'une carte, vous utilisez la clé:

 <code class="go">age := ages["Alice"]</code>
Copier après la connexion

Si vous essayez de récupérer une valeur pour une clé qui n'existe pas dans la carte, vous obtiendrez la valeur zéro pour le type de valeur. Pour vérifier si une clé existe avant d'accéder à sa valeur, vous pouvez utiliser l'affectation à plusieurs valeurs:

 <code class="go">age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
Copier après la connexion

Pour supprimer une paire de valeurs de clé à partir d'une carte, vous utilisez la fonction delete :

 <code class="go">delete(ages, "Bob")</code>
Copier après la connexion

Quels sont les principaux avantages de l'utilisation de cartes dans la programmation GO?

L'utilisation de cartes dans la programmation GO offre plusieurs avantages clés:

  1. Recherche efficace : les cartes dans GO sont implémentées sous forme de tables de hachage, qui permettent une recherche rapide, une insertion et une suppression des paires de valeurs clés, généralement en complexité temporelle O (1).
  2. Flexibilité : les cartes peuvent stocker tout type de clé et de valeur, tant que le type de clé est comparable. Cela permet des structures de données flexibles qui peuvent être adaptées à des besoins spécifiques.
  3. Dimensionnement dynamique : les cartes gèrent automatiquement le redimensionnement à mesure que des paires de valeurs clés sont ajoutées, éliminant le besoin de gestion manuelle de la mémoire.
  4. Facile à utiliser : la syntaxe pour la création, l'accès et la modification des cartes est simple et intuitive, ce qui les rend faciles à intégrer dans votre code.
  5. Support intégré : GO fournit des fonctions et des méthodes intégrées pour fonctionner avec des cartes, telles que len pour obtenir le nombre d'entrées, et delete pour supprimer les entrées.
  6. Sécurité de la concurrence : les cartes sont sans danger pour la lecture de plusieurs goroutines. Cependant, l'écriture sur une carte simultanément à partir de plusieurs goroutines nécessite l'utilisation de primitives de synchronisation comme des mutexes.

Comment pouvez-vous itérer efficacement sur une carte en Go?

Pour itérer efficacement sur une carte en Go, vous pouvez utiliser le mot clé de range dans une boucle for boucle. Le mot clé range vous permet d'accéder à la fois à la clé et à la valeur de chaque entrée dans la carte. Voici un exemple:

 <code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, "Charlie": 35, } for key, value := range ages { fmt.Printf("Name: %s, Age: %d\n", key, value) }</code>
Copier après la connexion

Cela irara sur toutes les paires de valeurs clés de la carte, en imprimant chaque nom et chaque âge. Notez que l'ordre dans lequel les paires de valeurs clés sont visitées n'est pas garantie, car les cartes sont intrinsèquement non ordonnées.

Si vous avez seulement besoin d'itérer les clés, vous pouvez utiliser la syntaxe suivante:

 <code class="go">for key := range ages { fmt.Printf("Name: %s\n", key) }</code>
Copier après la connexion

Si vous avez besoin d'itérer uniquement les valeurs, vous pouvez utiliser l'identifiant vierge _ pour la clé:

 <code class="go">for _, value := range ages { fmt.Printf("Age: %d\n", value) }</code>
Copier après la connexion

Quelles erreurs courantes doivent être évitées lorsque vous travaillez avec des cartes dans GO?

Lorsque vous travaillez avec des cartes dans GO, il y a plusieurs erreurs courantes qui doivent être évitées:

  1. Ne pas vérifier l'existence clé : lors de la récupération d'une valeur à partir d'une carte, il est facile d'oublier de vérifier si la clé existe. Ne pas le faire peut entraîner des valeurs zéro inattendues utilisées dans votre code.

     <code class="go">// Incorrect age := ages["David"] // If "David" doesn't exist, age will be 0 // Correct age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
    Copier après la connexion
  2. Écrit simultané : L'écriture sur une carte de plusieurs goroutines sans synchronisation appropriée peut conduire à des conditions de course et à un comportement non défini.

     <code class="go">// Incorrect go func() { ages["Eve"] = 40 }() go func() { ages["Frank"] = 45 }() // Correct var mutex sync.Mutex go func() { mutex.Lock() ages["Eve"] = 40 mutex.Unlock() }() go func() { mutex.Lock() ages["Frank"] = 45 mutex.Unlock() }()</code>
    Copier après la connexion
  3. En supposant l'ordre de carte : Étant donné que les cartes sont intrinsèquement non ordonnées, en supposant un ordre spécifique lorsque l'itération sur eux peut entraîner des bogues. Traitez toujours l'ordre de l'itération comme imprévisible.
  4. L'utilisation de types non correspondables comme des clés : les cartes nécessitent des clés pour être comparables, donc l'utilisation de types non équipés comme des tranches ou des cartes en tant que touches entraînera une erreur de compilation.

     <code class="go">// Incorrect invalidMap := make(map[[]int]int) // Will not compile // Correct validMap := make(map[string]int)</code>
    Copier après la connexion
  5. Outlorer l'initialisation de la carte : essayer d'utiliser une carte sans initialisation appropriée entraînera une panique d'exécution.

     <code class="go">// Incorrect var ages map[string]int ages["Alice"] = 30 // This will panic // Correct ages := make(map[string]int) ages["Alice"] = 30</code>
    Copier après la connexion

En évitant ces erreurs courantes, vous pouvez utiliser des cartes efficacement et en toute sécurité dans vos programmes 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 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