Junior — Middle
Was ist der Unterschied zwischen einer Karte mit Nullwert und einem Slice, der einen Nullwert enthält?
sobes.tech KI
Antwort von AI
In Go ist eine Karte (map) mit Nullwert eine Karte, die nicht initialisiert wurde und gleich nil ist. Der Versuch, in eine solche Karte zu schreiben, führt zu einem Panic.
Ein Slice mit Nullwert ist ein nil-Slice, das nicht auf ein Array zeigt und eine Länge sowie Kapazität von 0 hat. Es kann sicher verwendet werden, z.B. zum Lesen oder Weitergeben an Funktionen.
Wichtige Unterschiede:
- map == nil bedeutet, dass die Karte nicht initialisiert wurde und keine Elemente aufnehmen kann.
- slice == nil bedeutet, dass der Slice leer ist und nicht auf ein Array zeigt, aber zum Lesen (wird leer sein) und Weitergeben verwendet werden kann.
Beispiel:
var m map[string]int // m == nil
// m["key"] = 1 // Panic: Zuweisung an Eintrag in nil-Map
var s []int // s == nil
fmt.Println(len(s)) // 0
s = append(s, 1) // jetzt ist der Slice initialisiert
Daher ist eine nil-Map nicht zum Schreiben geeignet, und ein nil-Slice ist sicher zum Lesen und Erweitern.