Maison  >  Article  >  développement back-end  >  Comment convertir une tranche Go en un tableau de taille fixe ?

Comment convertir une tranche Go en un tableau de taille fixe ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 01:06:02954parcourir

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

Conversion de tranches en tableaux de taille fixe

Il est courant de rencontrer des scénarios dans lesquels vous devez convertir une tranche en tableau de taille fixe. Dans Go, les tranches sont des structures de données dynamiques qui peuvent s'agrandir et se réduire, tandis que les tableaux ont une taille fixe et doivent être initialisés avec une taille spécifique.

Considérez le code suivant :

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
        }
    }
}

Dans ce code, nous essayons de convertir une tranche nommée bricks en un tableau de taille fixe b. Cependant, cela entraîne une erreur car les tranches et les tableaux ont des types différents.

Utilisation de la copie

Pour convertir une tranche en un tableau de taille fixe, vous pouvez utiliser la copie fonction. La fonction de copie copie les éléments d'une tranche ou d'un tableau à un autre. Il prend deux arguments : la tranche ou le tableau de destination et la tranche ou le tableau source.

L'exemple suivant montre comment utiliser la copie pour convertir une tranche en tableau :

slice := []byte("abcdefgh")

var arr [4]byte

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

fmt.Println(arr)

Dans ce Par exemple, la fonction copy copie les quatre premiers octets de la tranche dans le tableau arr. Le tableau résultant contiendra les valeurs [97 98 99 100].

Utilisation des conversions tranche en tableau (Go 1.17)

Dans les versions Go 1.17 et supérieures, une nouvelle fonctionnalité a été introduite pour prendre en charge les conversions de tranche en tableau. Cela vous permet d'attribuer directement une tranche à un pointeur de tableau sans utiliser la fonction de copie.

L'exemple suivant montre l'utilisation des conversions de tranche en tableau :

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)

Dans cet exemple , nous créons une tranche s puis l'utilisons pour initialiser trois pointeurs de tableau : s0, s1 et s2. s0 est un pointeur vers un tableau de longueur nulle, s1 est un pointeur vers un tableau d'un élément et s2 est un pointeur vers un tableau de deux éléments.

Notez que cette fonctionnalité n'est disponible que pour les tranches qui sont soutenus par un tableau sous-jacent. Si la tranche n'est pas soutenue par un tableau, vous devrez toujours utiliser la fonction de copie pour la convertir en tableau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn