Heim >Backend-Entwicklung >Golang >Wie kann ich ein Slice in Go effizient tief kopieren?
In Go ist das effiziente Erstellen einer Deep-Kopie eines Slice unerlässlich, um Änderungen am ursprünglichen Backing-Array zu verhindern. Ein häufig verwendeter Ansatz beinhaltet die Verwendung eines Slice-Literals und der Append-Funktion:
copy := append([]T{}, orig...)
Es gibt jedoch eine alternative Methode, die die integrierte Kopierfunktion nutzt:
cpy := make([]T, len(orig)) copy(cpy, orig)
Dieser Ansatz Ruft den erforderlichen Speicher ab und kopiert Elemente mithilfe der integrierten Kopierfunktion direkt von der Quelle zum Ziel. Laut Dokumentation:
func copy(dst, src []Type) int
The copy built-in function copies elements from a source slice into a destination slice. ... Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).
Hinweis:
Beide Methoden führen eine flache Kopie durch, was bedeutet, dass die Zeiger oder Strukturfelder innerhalb des Slice weiterhin zeigen zu den ursprünglichen Werten.
Benchmark:
Vergleich der Leistung Die Verwendung beider Techniken führt zu ähnlichen Ergebnissen:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
Dies legt nahe, dass beide Ansätze gleichermaßen für das tiefe Kopieren von Slices in Go geeignet sind. Allerdings ist der Kopierfunktionsansatz möglicherweise etwas effizienter, wenn es um große Slices geht.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Slice in Go effizient tief kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!