Heim > Artikel > Backend-Entwicklung > 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!