Heim > Backend-Entwicklung > Golang > Wie kann ich ein Slice in Go tief kopieren: Anhängen oder Kopieren?

Wie kann ich ein Slice in Go tief kopieren: Anhängen oder Kopieren?

Mary-Kate Olsen
Freigeben: 2025-01-01 03:44:10
Original
708 Leute haben es durchsucht

How to Deep Copy a Slice in Go: Append vs. Copy?

So kopieren Sie ein Slice in Go präzise und effizient tief

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...)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage