Slices in Go löschen
Das bereitgestellte Code-Snippet zeigt einen Ansatz zum „Löschen“ eines Slice, indem seine Länge auf 0 gesetzt wird:
package main import "fmt" func main() { letters := []string{"a", "b", "c", "d"} fmt.Println(cap(letters)) fmt.Println(len(letters)) // clear the slice letters = letters[:0] fmt.Println(cap(letters)) fmt.Println(len(letters)) }
Obwohl dieser Ansatz scheinbar den Inhalt des Slice löscht, gibt er den zugrunde liegenden Speicher, der dem Slice zugeordnet ist, nicht an den Garbage Collector frei. Um ein Slice wirklich zu löschen und seinen Speicher zurückzugewinnen, besteht die beste Vorgehensweise darin, es auf Null zu setzen:
package main import "fmt" func main() { letters := []string{"a", "b", "c", "d"} fmt.Println(cap(letters)) fmt.Println(len(letters)) // clear the slice letters = nil fmt.Println(cap(letters)) fmt.Println(len(letters)) }
Das Setzen eines Slice auf Null hat mehrere Vorteile:
Es ist wichtig zu beachten, dass das Ändern der Kapazität eines Slice auf Null weder das Slice löscht noch den zugrunde liegenden Speicher freigibt. Wenn Sie jedoch ein Slice auf Null setzen, wird effektiv jeglicher zugewiesener Speicher entfernt und das Slice wird auf seinen Anfangszustand zurückgesetzt.
Das obige ist der detaillierte Inhalt vonWie lösche ich wirklich einen Slice in Go und gewinne seinen Speicher zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!