Einen Slice in Go löschen
Der Artikel beschreibt den optimalen Ansatz zum Löschen eines Slice in Go. Die ursprünglich vorgeschlagene Lösung zielte darauf ab, ein Slice zu löschen, indem es in einen leeren Bereich seines eigenen Puffers gesetzt wurde. Obwohl dieser Ansatz logisch erscheint, gibt er nicht den zugrunde liegenden Speicher frei, der dem Slice zugeordnet ist.
Die empfohlene Lösung besteht darin, den Slice einfach auf Null zu setzen. Nil-Slices in Go weisen gute Eigenschaften auf, und durch die Zuweisung des Slice zu Nil wird der zugrunde liegende Speicher für den Garbage Collector freigegeben. Dieser Ansatz räumt den Slice effektiv auf, ohne die Einschränkungen des ursprünglichen Vorschlags in Kauf zu nehmen.
Um die Wirksamkeit dieser Methode zu veranschaulichen, betrachten Sie das folgende Codebeispiel:
package main import ( "fmt" ) func dump(letters []string) { fmt.Println("letters = ", letters) fmt.Println(cap(letters)) fmt.Println(len(letters)) for i := range letters { fmt.Println(i, letters[i]) } } func main() { letters := []string{"a", "b", "c", "d"} dump(letters) // clear the slice letters = nil dump(letters) // add stuff back to it letters = append(letters, "e") dump(letters) }
Ausgabe:
letters = [a b c d] 4 4 0 a 1 b 2 c 3 d letters = [] 0 0 letters = [e] 1 1 0 e
Wie gezeigt, löscht das Setzen des Slice auf Null seinen Inhalt, einschließlich seiner Kapazität. Dies ermöglicht die effiziente Wiederverwendung des Slice ohne verbleibende Daten aus früheren Vorgängen.
Das obige ist der detaillierte Inhalt vonWie löscht man effektiv einen Slice in Go und gibt den zugrunde liegenden Speicher frei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!