Arrays in Slices in Go konvertieren
Arrays in Slices umwandeln mag trivial erscheinen, aber klare Beispiele online zu finden, kann eine Herausforderung sein. Dieser Artikel bietet eine detaillierte Lösung für dieses Problem, insbesondere bei der Arbeit mit Byte-Arrays.
In Go ist ein Array eine Sammlung von Werten fester Größe, während ein Slice eine referenztypisierte Ansicht mit dynamischer Größe ist in ein zugrunde liegendes Array. Um ein Byte-Array in einen Byte-Slice umzuwandeln, kann die Syntax []byte(array) verwendet werden. Dieser Ansatz erstellt jedoch eine Kopie der zugrunde liegenden Daten, was in einigen Szenarien, in denen Effizienz entscheidend ist, unerwünscht sein kann.
Eine effizientere Methode ist die Verwendung des Slice-Syntax-Arrays[:]. Dieser Ausdruck erstellt einen Slice, der das zugrunde liegende Array mit dem ursprünglichen Array teilt. Infolgedessen werden alle Änderungen, die entweder am Slice oder am Array vorgenommen werden, in beiden widergespiegelt.
Hier ist ein Beispielcode, der den Konvertierungsprozess demonstriert, ohne eine Kopie der Daten zu erstellen:
package main import "fmt" func Foo() [32]byte { return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} } func Bar(b []byte) { fmt.Println(string(b)) } func main() { x := Foo() Bar(x[:]) }
In diesem Beispiel gibt die Foo-Funktion ein Byte-Array zurück und die Bar-Funktion verwendet einen Byte-Slice als Eingabe. Wenn die Bar-Funktion aufgerufen wird, wird der Ausdruck x[:] verwendet, um ein Slice zu erstellen, das dasselbe zugrunde liegende Array wie x verwendet. Alle an x vorgenommenen Änderungen werden in dem an Bar übergebenen Slice widergespiegelt und umgekehrt.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Go-Array effizient in ein Slice konvertieren, ohne Daten zu kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!