Go ne permet pas de mélanger des tranches "éclatées" avec des paramètres réguliers dans des fonctions variadiques. Cela est évident dans l'exemple suivant :
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) // Error: too many arguments in call to foo } func foo(s ...string) { fmt.Println(s) }
Selon la spécification du langage Go, un argument de longueur variable peut être spécifié de deux manières : en énumérant les éléments ou en utilisant une tranche existante. Le mélange des deux n'est pas autorisé.
Lorsque les éléments sont énumérés, une nouvelle tranche est créée où les éléments deviennent les valeurs du paramètre variadique. Cependant, lorsqu'une tranche existante est utilisée avec ..., aucune nouvelle tranche n'est créée et la tranche d'origine devient le paramètre variadique.
Le passage à la fois d'un seul élément et d'une tranche entraînera une incompatibilité de type, conduisant à une erreur du compilateur. Mélanger les deux options nécessiterait d'allouer une nouvelle tranche, mais Go ne supporte pas ce comportement.
Le message d'erreur "trop d'arguments dans l'appel à foo" indique que le compilateur attend une seule tranche ou une liste d'éléments , mais pas une combinaison des deux. Pour résoudre ce problème, supprimez des éléments... ou énumérez les éléments individuellement.
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!