Warum erhalte ich die Meldung „Panik: Laufzeitfehler: Index außerhalb des Bereichs', obwohl mein Go-Slice eine Kapazität ungleich Null hat?

Patricia Arquette
Freigeben: 2024-11-02 09:08:03
Original
570 Leute haben es durchsucht

Why am I getting

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>
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!