Maison >développement back-end >Golang >Comment convertir des tableaux Go en tranches pour le passage de fonctions ?

Comment convertir des tableaux Go en tranches pour le passage de fonctions ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-12 18:28:22463parcourir

How to Convert Go Arrays to Slices for Function Passing?

Conversion de tableaux en tranches dans Go

Lorsque vous travaillez avec Go, vous pouvez rencontrer des situations dans lesquelles vous devez convertir des tableaux en tranches pour un traitement ultérieur. Les tableaux sont des collections d'éléments de taille fixe, tandis que les tranches sont dynamiques et peuvent s'agrandir ou se réduire selon les besoins.

Considérez le scénario suivant : vous disposez d'une fonction qui renvoie un tableau d'octets :

func Foo() [32]byte {...}

Vous souhaitez transmettre le résultat de cette fonction à une autre fonction qui attend une tranche d'octets :

func Bar(b []byte) { ... }

Attribuer simplement le tableau au slice, comme ceci :

d := Foo()
Bar(d)

entraînera une erreur de compilation en raison d'une incompatibilité de type. Pour convertir le tableau en tranche, vous pouvez utiliser la syntaxe [:] pour créer un en-tête de tranche qui pointe vers le tableau sous-jacent :

func main() {
    x := Foo()
    Bar(x[:])
}

Cette opération ne crée pas de copie des données sous-jacentes ; à la place, il crée un en-tête de tranche qui fait référence au même emplacement mémoire que le tableau.

Voici un exemple complet qui démontre la conversion et le passage du tableau à la fonction Bar :

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[:])
}

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