Heim >Backend-Entwicklung >Golang >Wie konvertiere ich ein Go-Slice in ein Array fester Größe?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-19 01:06:021028Durchsuche

How do I convert a Go slice to a fixed-size array?

Slices in Arrays mit fester Größe konvertieren

Es kommt häufig vor, dass Sie auf Szenarien stoßen, in denen Sie ein Slice in ein Array mit fester Größe konvertieren müssen. In Go sind Slices dynamische Datenstrukturen, die wachsen und schrumpfen können, während Arrays eine feste Größe haben und mit einer bestimmten Größe initialisiert werden müssen.

Beachten Sie den folgenden Code:

func gen(bricks []Brick) {
    if len(bricks) == 16 {
        if check(Sculpture{bricks}) {
            var b [16]Brick = bricks[0:16]; // Error: Cannot assign slice to array
        }
    }
}

In diesem Code versuchen wir, ein Slice mit dem Namen „Bricks“ in ein Array mit fester Größe b umzuwandeln. Dies führt jedoch zu einem Fehler, da Slices und Arrays unterschiedliche Typen haben.

Kopie verwenden

Um ein Slice in ein Array fester Größe zu konvertieren, können Sie die Kopie verwenden Funktion. Die Kopierfunktion kopiert Elemente von einem Slice oder Array in ein anderes. Es werden zwei Argumente benötigt: das Ziel-Slice oder -Array und das Quell-Slice oder -Array.

Das folgende Beispiel zeigt, wie Sie mithilfe von copy ein Slice in ein Array konvertieren:

slice := []byte("abcdefgh")

var arr [4]byte

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

fmt.Println(arr)

Hier Beispielsweise kopiert die Kopierfunktion die ersten vier Bytes des Slice in das arr-Array. Das resultierende Array enthält die Werte [97 98 99 100].

Verwendung von Slice-zu-Array-Konvertierungen (Go 1.17)

In Go-Versionen 1.17 und höher Es wurde eine neue Funktion eingeführt, um Slice-zu-Array-Konvertierungen zu unterstützen. Dadurch können Sie ein Slice direkt einem Array-Zeiger zuweisen, ohne die Kopierfunktion zu verwenden.

Das folgende Beispiel demonstriert die Verwendung von Slice-zu-Array-Konvertierungen:

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]
// s4 := (*[4]byte)(s)      // panics: len([4]byte) > len(s)

In diesem Beispiel erstellen wir ein Slice s und verwenden es dann, um drei Array-Zeiger zu initialisieren: s0, s1 und s2. s0 ist ein Zeiger auf ein Array mit der Länge Null, s1 ist ein Zeiger auf ein Array mit einem Element und s2 ist ein Zeiger auf ein Array mit zwei Elementen.

Beachten Sie, dass diese Funktion nur für Slices verfügbar ist werden durch ein zugrunde liegendes Array unterstützt. Wenn das Slice nicht durch ein Array unterstützt wird, müssen Sie dennoch die Kopierfunktion verwenden, um es in ein Array zu konvertieren.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich ein Go-Slice in ein Array fester Größe?. 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