Heim >Backend-Entwicklung >Golang >Wie kann ich ein Slice in Go effizient tief kopieren?

Wie kann ich ein Slice in Go effizient tief kopieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-09 18:15:151035Durchsuche

How to Efficiently Deep Copy a Slice in Go?

Tiefenkopieren eines Slice in Go

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!

Stellungnahme:
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