Heim > Artikel > Backend-Entwicklung > Warum erhalte ich die Meldung „Panik: Laufzeitfehler: Index außerhalb des Bereichs“, obwohl mein Go-Slice eine Kapazität ungleich Null hat?
Fehlerbehebung bei „Panik: Laufzeitfehler: Index außerhalb des Bereichs“, wenn die Array-Länge nicht Null ist
In Go, beim Arbeiten mit Arrays oder Bei Scheiben ist es wichtig, das Konzept von Länge und Kapazität zu verstehen. Im angegebenen Codeausschnitt ist das Problem auf die Initialisierung des Ergebnisarrays mit make([]string, 0, 4) zurückzuführen.
Die Rolle von make([]string, 0, 4) verstehen
make([]string, 0, 4) erstellt ein Slice vom Typ []string mit einer Anfangslänge von 0 und einer Kapazität von 4. Kapazität definiert die maximale Anzahl von Elementen, die im Slice gespeichert werden können, ohne dass Speicher neu zugewiesen werden muss.
Unterscheidung zwischen Länge und Kapazität
Länge gibt die Anzahl der derzeit im Slice vorhandenen Elemente an Slice, während die Kapazität die maximale Größe darstellt, die es aufnehmen kann. Wenn der Slice bereits genügend Elemente enthält, führt das Hinzufügen weiterer Elemente innerhalb der Kapazität nicht zu einer Neuzuweisung. Eine Überschreitung der Kapazität löst jedoch eine Neuzuweisung aus, bei der ein neues zugrunde liegendes Array erstellt und die vorhandenen Elemente kopiert werden.
In Ihrem Code initialisiert make([]string, 0, 4) ein leeres Slice mit einer Kapazität von 4. Der Versuch, auf Elemente zuzugreifen, die über die aktuelle Länge (Index 0) hinausgehen, führt zu einem Laufzeitfehler, da an diesem Index keine Elemente vorhanden sind.
Auflösung das Problem
Der Fehler kann behoben werden, indem Sie entweder das Slice mit einer ausreichenden Anfangslänge initialisieren oder „Append“ verwenden, um das Slice nach Bedarf dynamisch zu vergrößern.
Option 1: Initialisieren mit ausreichender Länge
Wenn Sie die ungefähre Anzahl der Elemente kennen, die im Slice gespeichert werden, können Sie es mit einer geeigneten Länge initialisieren. Zum Beispiel initialisiert result := make([]string, 4) ein Slice mit einer Länge und Kapazität von 4.
Option 2: Append verwenden
Append hängt an Elemente bis zum Ende eines Slice. Wenn der Slice über ausreichende Kapazität verfügt, wird er erneut segmentiert, um die neuen Elemente aufzunehmen. Wenn nicht, wird ein neues zugrunde liegendes Array zugewiesen. Durch die wiederholte Verwendung von „append“ können Sie das Slice nach Bedarf schrittweise vergrößern, ohne befürchten zu müssen, dass die Kapazität überschritten wird.
Vereinfachter Code mit „Append“
Hier ist eine vereinfachte Version Ihres Codes mit „append“. anhängen:
<code class="go">package main import ( "fmt" "strings" ) func main() { strs := strings.Fields("Political srt") var result []string for _, s := range strs { if strings.ContainsAny(s, "eaiu") { result = append(result, s) } } fmt.Println(result) }</code>
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Meldung „Panik: Laufzeitfehler: Index außerhalb des Bereichs“, obwohl mein Go-Slice eine Kapazität ungleich Null hat?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!