Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist die Golang-Karte nicht gleichzeitig?

Warum ist die Golang-Karte nicht gleichzeitig?

(*-*)浩
(*-*)浩Original
2019-12-14 11:40:593731Durchsuche

Warum ist die Golang-Karte nicht gleichzeitig?

Der Kartendatentyp ist in vielen Sprachen verfügbar. Es handelt sich um eine Hash-Tabelle in Form von Schlüssel und Wert, sodass Schlüssel und Wert für eine schnelle Suche einzeln zugeordnet werden können. Hinzufügung, Löschung usw. funktionieren. Die Go-Sprache stellt keine Ausnahme dar und stellt den Kartendatenstrukturtyp bereit.

Der eingebaute MAP sollte die Box nicht öffnen und verwenden (Empfohlen: GO )

Golang, MAP ist eine Referenz Typ, wie z. B. Pointer Slicing, zeigt auf Null, nachdem er mit dem folgenden Code deklariert wurde. Dies wird auch in der offiziellen Golang-Dokumentation erläutert. Verwenden Sie es daher niemals direkt nach der Deklaration. Sie können zunächst häufig die folgenden Fehler machen:

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

Die erste Codezeile oben initialisiert die Karte nicht Das Schreiben darauf ist ein Verweis auf einen Nullzeiger, der einen Painc verursacht.

Denken Sie also daran, die Make-Funktion zu verwenden, um Speicher zuzuweisen und zu initialisieren:

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

Karte in Golang ist nicht nebenläufigkeitssicher

Ich benutze die Karte oft und es fühlt sich gut an, sie zu benutzen, aber eines Tages nimmt der Verkehr zu und das Programm hängt sich auf, ohne dass ich es merke, aber es hat vorher gut funktioniert.

Daher sollten zu Beginn einige gute Gewohnheiten entwickelt werden, wie z. B. Behauptungsprüfung, Überlegungen zur Parallelitätssicherheit usw.

Auch wenn die Karte sehr nützlich ist, muss man vorsichtig sein. Vielleicht wissen viele Leute immer noch nicht, dass die integrierte Karte von Golang nicht wirklich parallelitätssicher ist.

Vielleicht können Sie sync.Map ausprobieren

Die sync.Map in Golang ist parallelitätssicher. Tatsächlich handelt es sich um einen benutzerdefinierten Namen von Golang im Sync-Paket. Kartenstruktur. Der Strukturprototyp lautet wie folgt:

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

Das obige ist der detaillierte Inhalt vonWarum ist die Golang-Karte nicht gleichzeitig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Unterstützt Emacs Golang?Nächster Artikel:Unterstützt Emacs Golang?