Heim >Backend-Entwicklung >Golang >Wie kann ich ein Slice in Go tief kopieren: Anhängen oder Kopieren?
In Go erfordert das Kopieren von Slices Überlegungen zur Erstellung eines neuen Backing-Arrays, um unbeabsichtigte Änderungen am ursprünglichen Array zu verhindern . Es gibt mehrere übersichtliche und leistungsstarke Möglichkeiten, dies zu erreichen.
Ein Ansatz ist die Verwendung der Append-Funktion:
copy := append([]T{}, orig...)
wobei T der Elementtyp des ursprünglichen Slice-Origins ist. Es gibt jedoch eine alternative Lösung mit der integrierten Kopierfunktion:
cpy := make([]T, len(orig)) copy(cpy, orig)
Die Kopierfunktion ist für das Kopieren von Slices innerhalb der Sprache optimiert. Aus der Go-Dokumentation:
"Die integrierte Kopierfunktion kopiert Elemente von einem Quell-Slice in ein Ziel-Slice. ... Copy gibt die Anzahl der kopierten Elemente zurück, was dem Minimum von len(src) entspricht. und len(dst)."
Hinweis:
Es ist wichtig zu bedenken, dass diese Lösungen Werte im Slice kopieren. Wenn das Slice Zeiger oder Strukturen mit Zeigerfeldern enthält, zeigen diese Zeiger immer noch auf die gleichen Werte wie das ursprüngliche Slice.
Benchmark:
Testen des Anhängens und Kopierens Ansätze zeigen ähnliche Leistungsmerkmale:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
Die Benchmark-Ergebnisse legen nahe, dass beide Methoden für Deep Copying gleichermaßen effizient sind Scheiben.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Slice in Go tief kopieren: Anhängen oder Kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!