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 attribué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 passée à la fonction unpack en utilisant ....
Par exemple :
<code class="go">var sliceOfSlices2 []interface{} for _, v := range sliceOfSlices { sliceOfSlices2 = append(sliceOfSlices2, v) } unpack(sliceOfSlices2...)</code>
Cette approche garantit que chaque élément de la tranche de tranches est passé séparément à la fonction de décompression, comme prévu.
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!