Dans Go, les fonctions variadiques acceptent un nombre indéfini d'arguments d'un type spécifique. Lors du passage d'une tranche de tranches à une telle fonction, il est crucial de comprendre les mécanismes de conversion de type et de décompression impliqués.
Si la tranche contient des éléments du même type que le paramètre variadique, la tranche peut être passée sans déballage. Cependant, si la tranche contient un mélange de types ou de tranches à l'intérieur des tranches, la situation devient plus complexe.
Selon la spécification Go, si l'argument final d'une fonction variadique est attribuable à un type de tranche, il peut être passée telle quelle comme valeur du paramètre variadique s'il est suivi de .... Cela signifie qu'aucune nouvelle tranche ne sera créée.
Dans le cas d'une tranche de tranches, la tranche elle-même ne peut pas être affectée au paramètre variadique (de type []interface{}). C'est pourquoi une erreur est générée lors de la tentative de transmission de sliceOfSlices... à la fonction de décompression.
Pour résoudre ce problème, une étape intermédiaire est requise. Une nouvelle tranche du type approprié ([]interface{} dans ce cas) doit être créée et les éléments de la tranche des tranches copiés dedans. Cette nouvelle tranche peut ensuite être transmise à la fonction de décompression en utilisant ....
Par exemple :
var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
sliceOfSlices2 = append(sliceOfSlices2, v)
}
unpack(sliceOfSlices2...)
Cette approche garantit que chaque élément de la tranche de tranches est transmis séparément à la fonction unpack, comme prévu.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3