Die Golang-Karte ist nicht adressierbar

WBOY
Freigeben: 2023-05-10 18:33:37
Original
728 Leute haben es durchsucht

In Golang ist Karte eine sehr häufig verwendete Datenstruktur. Es handelt sich um eine ungeordnete Sammlung von Schlüssel-Wert-Paaren, die zum Speichern einer Reihe verknüpfter Daten verwendet werden. Obwohl die Karte in Golang sehr praktisch ist, unterscheidet sie sich grundlegend von gewöhnlichen Variablen, das heißt, die Karte ist nicht adressierbar. Lassen Sie uns untersuchen, warum Golangs Karte nicht adressierbar ist.

Werfen wir zunächst einen Blick auf die Definition von Karte in Golang. Die Syntax lautet wie folgt:

map[KeyType]ValueType
Nach dem Login kopieren

Unter diesen repräsentiert KeyType den Schlüsseltyp in der Karte und ValueType den Werttyp in der Karte. Im folgenden Beispiel definieren wir beispielsweise eine Karte mit Schlüsseln vom Typ string und Werten vom Typ int:

var m map[string]int
Nach dem Login kopieren

Wir können die Make-Funktion verwenden, um eine Karte zu initialisieren, zum Beispiel:

m := make(map[string]int)
Nach dem Login kopieren

Der Anfangswert der Karte ist Null. Wenn Sie es direkt ohne Zuweisung oder Betrieb der initialisierten Karte verwenden, wird ein Laufzeitfehler ausgelöst.

Die Speicherstruktur von Maps im Speicher unterscheidet sich von Arrays und Zeigern. Sie wird durch eine Hash-Tabelle implementiert. Jedes Schlüssel-Wert-Paar verfügt über einen Hash-Wert als Index, der zum schnellen Auffinden von Daten verwendet wird. Wenn die Karte adressierbar ist, ändert sich ihr Hash, sodass die Daten nicht schnell nachgeschlagen werden können und die interne Struktur der Karte beschädigt wird.

Darüber hinaus ändert sich die Größe der Karte dynamisch und sie kann basierend auf dem Hinzufügen oder Löschen von Schlüssel-Wert-Paaren dynamisch erweitert oder verkleinert werden. Wenn die Karte adressierbar ist, ändert sich ihre interne Struktur, sodass die Designer von Golang die Adressierbarkeit der Karte deaktivieren.

Zusätzlich zur Karte sind Slices in Golang auch nicht adressierbar. Dies liegt daran, dass die zugrunde liegende Struktur eines Slice ein Zeiger auf ein Array und eine Struktur mit einem Längenwert ist. Wenn das Slice angesprochen werden kann, ändert sich die Adresse des zugrunde liegenden Arrays, wodurch der Zeiger und der Längenwert des Slice ungültig werden Daher haben die Designer auch die Golang-Slice-Adressierung deaktiviert.

Wenn wir in Golang die Werte in der Karte oder im Slice ändern müssen, können wir zum Betrieb Indizes oder Zeiger verwenden. Der folgende Code veranschaulicht beispielsweise die Verwendung eines Index zum Ändern eines Werts in einer Karte:

m := make(map[string]int)
m["a"] = 1
m["b"] = 2
m["c"] = 3

m["a"] = 4
fmt.Println(m) // map[a:4 b:2 c:3]
Nach dem Login kopieren

Wenn Sie einen Wert in einem Slice ändern müssen, können Sie zunächst einen Zeiger auf eine Position im Slice abrufen und dann den Zeiger auf verwenden modifizieren Sie es. Der folgende Code demonstriert beispielsweise die Verwendung eines Zeigers zum Ändern des Werts in einem Slice:

s := []int{1, 2, 3}
p := &s[1]
*p = 4
fmt.Println(s) // [1 4 3]
Nach dem Login kopieren

Kurz gesagt, in Golang sind Karte und Slice sehr häufig verwendete Datenstrukturen, die jedoch nicht adressierbar sind. Wenn wir einen ihrer Werte ändern müssen, können wir für die Operation Indizes oder Zeiger verwenden. Gleichzeitig müssen Sie auf die zugrunde liegende Implementierung von Map und Slice sowie deren dynamischen Erweiterungsmechanismus achten.

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

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage