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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 18:35:03867parcourir

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

Conversion de tranches en tableaux de taille fixe dans Go

Un scénario courant dans Go est la nécessité de convertir une tranche en un tableau de taille fixe. Bien que cela puisse paraître simple, cela peut entraîner une erreur de compilation. Pour comprendre cette erreur et sa solution, analysons l'extrait de code suivant :

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

Le message d'erreur indique que l'objet slice ne peut pas être directement affecté à un tableau de taille fixe. En effet, Go traite les tranches et les tableaux comme des types distincts.

Solution : à l'aide de la fonction « copier »

Pour convertir une tranche en un tableau de taille fixe, vous pouvez utilisez la fonction « copie » intégrée. Cette fonction prend deux tranches en entrée et copie un nombre spécifié d'éléments de la tranche source vers la tranche de destination. En fournissant les entrées correctes, vous pouvez transférer efficacement les éléments de la tranche dans le tableau de taille fixe.

Voici un exemple illustrant l'utilisation de « copie » :

slice := []byte("abcdefgh")

var arr [4]byte

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

fmt.Println(arr) // Output: [97 98 99 100]

Dans ce cas , 'copy' transfère les quatre premiers éléments de la tranche dans le tableau 'arr'.

Syntaxe alternative

Une autre façon concise d'obtenir le même résultat en utilisant 'copy ' consiste à omettre les indices de tranche :

copy(arr[:], slice)

La fonction 'copier' copiera automatiquement le nombre minimum d'éléments que les deux tranches peuvent accueillir. Par conséquent, vous pouvez ignorer la spécification des indices lorsque les tailles correspondent ou lorsque vous souhaitez remplir l'intégralité du tableau de taille fixe.

Go 1.17 et supérieur

Il convient de noter que Go 1.17 a introduit la prise en charge des conversions de tranche en tableau. Cette fonctionnalité permet d'attribuer directement une tranche à un pointeur de tableau du même type de base :

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]

Cependant, cette fonctionnalité est toujours considérée comme expérimentale et peut ne pas être disponible dans tous les environnements.

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