Neue Werte können zu Nil Slice hinzugefügt werden, aber das Hinzufügen neuer Werte zu Nil Map führt zu einem Laufzeitfehler. Mal sehen warum
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
Warum das Anhängen an ein Nil-Slice funktioniert:
Slice ist ein Verweis auf ein zugrunde liegendes Array und eine Datenstruktur mit dynamischer Größe. Es besteht aus 3 Komponenten
Wenn wir ein Null-Slice deklarieren, sind Länge und Kapazität Null und es zeigt nicht auf ein zugrunde liegendes Array. Grundsätzlich überprüft der Anhängevorgang die Kapazität. Wenn diese nicht ausreicht, weist er ein neues zugrunde liegendes Array mit ausreichend Kapazität zum Speichern der neuen Elemente zu und gibt einen neuen Slice zurück, der auf das neu erstellte Array verweist. Das Anhängen funktioniert also wie erwartet.
Warum das Hinzufügen zu einer Nil-Karte nicht funktioniert:
Map in Golang fungiert im Wesentlichen als Hash-Tabelle und die internen Datenstrukturen müssen zuerst initialisiert werden, bevor wir das Schlüssel-Wert-Paar speichern können.
Wenn wir eine Karte als Null deklarieren (var m map[string]int), ist sie nicht initialisiert und noch nicht bereit, Schlüssel-Wert-Paare zu speichern. Dies führt also zu einem Laufzeitfehler, wenn wir versuchen, Werte zu einer Null-Map hinzuzufügen. Um solche Fehler zu vermeiden, erstellen Sie eine Karte mit make
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
Um mehr über solche Themen sowie Codebeispiele zu erfahren, schauen Sie sich gerne mein Github-Repo an:
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3