Maison  >  Article  >  développement back-end  >  Comment transmettre une tranche de tranches en tant qu'arguments décompressés à une fonction variadique dans Go ?

Comment transmettre une tranche de tranches en tant qu'arguments décompressés à une fonction variadique dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 08:20:29584parcourir

How to Pass a Slice of Slices as Unpacked Arguments to a Variadic Function in Go?

Déballage de tranches de tranches en tant qu'arguments variadiques

Problème :
Lorsque vous essayez de transmettre une tranche de tranches en tant qu'arguments variadiques à un variadique fonction, une erreur de compilation se produit. L'erreur indique une incapacité à attribuer le type de tranche source au type de paramètre variadique de destination.

Explication :
Selon la spécification Go, une fonction avec des paramètres variadiques de type .. .T attend une seule tranche de type []T comme argument. Cependant, dans le cas d'une tranche de tranches, [][]T, cette condition ne peut être remplie.

Solution :
Pour résoudre ce problème, une nouvelle tranche du le type requis []T doit être créé et rempli avec les valeurs souhaitées. Cette nouvelle tranche peut ensuite être passée décompressée à l'aide de l'opérateur points de suspension (...).

Exemple :

<code class="go">package main

import (
    "fmt"
)

func unpack(args ...interface{}) {
    fmt.Println(len(args))
}

func main() {
    sliceOfSlices := [][]int{
        []int{1, 2},
        []int{101, 102},
    }

    // Create a new slice of type []interface{}
    sliceOfInterfaces := []interface{}{}
    for _, v := range sliceOfSlices {
        sliceOfInterfaces = append(sliceOfInterfaces, v)
    }

    unpack(sliceOfInterfaces...) // Pass unpacked values
}</code>

Sortie :

2

Dans cet exemple, la fonction unpack() est appelée avec les éléments décompressés de sliceOfSlices comme arguments. La fonction len() est utilisée pour démontrer le nombre d'arguments passés, ce qui indique que les deux éléments de la tranche imbriquée sont décompressés.

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