Wie konvertiere ich ein Slice in ein Array mit fester Größe in Go?

Susan Sarandon
Freigeben: 2024-11-11 18:35:03
Original
907 Leute haben es durchsucht

How to Convert a Slice to a Fixed Size Array in Go?

Slices in Arrays mit fester Größe in Go konvertieren

Ein häufiges Szenario in Go ist die Notwendigkeit, ein Slice in ein Array mit fester Größe zu konvertieren. Obwohl dies einfach erscheint, kann es zu einem Kompilierungsfehler führen. Um diesen Fehler und seine Lösung zu verstehen, analysieren wir den folgenden Codeausschnitt:

func gen(bricks []Brick) {
    if len(bricks) == 16 {
        if check(Sculpture{bricks}) {
            var b [16]Brick = bricks[0:16]; // This line generates the error
        }
     }
}
Nach dem Login kopieren

Die Fehlermeldung weist darauf hin, dass das Slice-Objekt nicht direkt einem Array fester Größe zugewiesen werden kann. Dies liegt daran, dass Go Slices und Arrays als unterschiedliche Typen behandelt.

Lösung: Verwenden der Funktion „Kopieren“

Um ein Slice in ein Array fester Größe zu konvertieren, können Sie dies tun Verwenden Sie die integrierte Kopierfunktion. Diese Funktion verwendet zwei Slices als Eingabe und kopiert eine angegebene Anzahl von Elementen vom Quell-Slice in das Ziel-Slice. Durch die Bereitstellung der richtigen Eingaben können Sie die Elemente des Slice effektiv in das Array mit fester Größe übertragen.

Hier ist ein Beispiel, das die Verwendung von „Kopieren“ demonstriert:

slice := []byte("abcdefgh")

var arr [4]byte

copy(arr[:], slice[:4])

fmt.Println(arr) // Output: [97 98 99 100]
Nach dem Login kopieren

In diesem Fall , 'copy' überträgt die ersten vier Elemente des Slice in das Array 'arr'.

Alternative Syntax

Eine weitere prägnante Möglichkeit, mit „Kopieren“ das gleiche Ergebnis zu erzielen, besteht darin, die Slice-Indizes wegzulassen:

copy(arr[:], slice)
Nach dem Login kopieren

Die Funktion „Kopieren“ kopiert automatisch die Mindestanzahl von Elemente, die beide Slices aufnehmen können. Daher können Sie die Angabe der Indizes überspringen, wenn die Größen übereinstimmen oder wenn Sie das gesamte Array mit fester Größe füllen möchten.

Gehen Sie auf 1.17 und höher

Das ist erwähnenswert Go 1.17 führte die Unterstützung für Slice-zu-Array-Konvertierungen ein. Mit dieser Funktion können Sie einen Slice direkt einem Array-Zeiger desselben Basistyps zuweisen:

s := make([]byte, 2, 4)
s0 := (*[0]byte)(s)      // s0 != nil
s1 := (*[1]byte)(s[1:])  // &s1[0] == &s[1]
s2 := (*[2]byte)(s)      // &s2[0] == &s[0]
Nach dem Login kopieren

Diese Funktionalität gilt jedoch noch als experimentell und ist möglicherweise nicht in allen Umgebungen verfügbar.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein Slice in ein Array mit fester Größe in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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