Sobes.tech
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.