Maison  >  Article  >  développement back-end  >  Pourquoi la carte Golang n'est-elle pas concurrente ?

Pourquoi la carte Golang n'est-elle pas concurrente ?

(*-*)浩
(*-*)浩original
2019-12-14 11:40:593714parcourir

Pourquoi la carte Golang n'est-elle pas concurrente ?

Le type de données cartographiques est disponible dans de nombreuses langues. Il s'agit d'une table de hachage sous forme de clé et de valeur, afin que la clé et la valeur puissent être mappées une par une pour une recherche rapide, l'ajout, la suppression, etc. fonctionnent. Le langage Go ne fait pas exception, fournissant le type de structure de données cartographiques.

La MAP intégrée ne doit pas ouvrir la boîte et utiliser (Recommandé : GO )

Golang, MAP est une référence type, tel que Comme le découpage de pointeur, il pointe vers zéro après avoir été déclaré avec le code suivant. Ceci est également expliqué dans la documentation officielle de Golang, donc ne l'utilisez jamais directement après l'avoir déclaré. Vous pouvez souvent commettre les erreurs suivantes au début :

var m map[string]string
m["result"] = "result"

La première ligne de code ci-dessus n'initialise pas la carte, mais. y écrire est une référence à un pointeur nul, ce qui provoquera un problème.

Alors, n'oubliez pas d'utiliser la fonction make pour allouer de la mémoire et l'initialiser :

m := make(map[string]string)
m["result"] = "result"

la carte dans Golang n'est pas sécurisée pour la concurrence

J'utilise souvent Map, et ça fait du bien de l'utiliser, mais soudain un jour le trafic augmente, et le programme raccroche sans que je m'en aperçoive, je ne sais pas ce qui s'est passé, mais ça fonctionnait bien avant.

Certaines bonnes habitudes doivent donc être développées au début, telles que la vérification des assertions, les considérations de sécurité de la concurrence, etc.

Même si la carte est très utile, il faut être prudent. Peut-être que beaucoup de gens ne savent toujours pas que la carte intégrée de Golang n'est pas réellement sécurisée en matière de concurrence.

Vous pouvez peut-être essayer sync.Map

Le sync.Map dans golang est sécurisé pour la concurrence. En fait, c'est un nom personnalisé de golang dans le package de synchronisation. Structure de la carte. Le prototype de structure est le suivant :

type Map struct {
   mu Mutex
   read atomic.Value // readOnly
   dirty map[interface{}]*entry
   misses int
}

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