Maison >développement back-end >Golang >Les tranches éclatées et les paramètres réguliers peuvent-ils être combinés dans les fonctions variadiques de Go ?
Combinaison de tranches "éclatées" et de paramètres réguliers dans des fonctions variadiques
Le langage Go permet l'utilisation de fonctions variadiques, qui acceptent une variable nombre d'arguments. Cependant, il existe certaines limites lorsque l'on tente de combiner des tranches « éclatées » (tranches passées en tant qu'éléments individuels) avec des paramètres réguliers dans de telles fonctions.
Considérons l'exemple suivant :
func main() { stuff := []string{"baz", "bla"} foo("bar", stuff...) } func foo(s ...string) { fmt.Println(s) }
Dans ce code, nous nous attendons à transmettre les éléments de la tranche stuff individuellement à la fonction foo. Cependant, le compilateur génère une erreur en raison d'un « trop grand nombre d'arguments ». Cette erreur se produit car Go ne permet pas de mélanger des tranches éclatées avec des paramètres réguliers.
La raison de cette limitation réside dans la manière dont les arguments variadiques sont transmis dans Go. Lorsqu'une tranche éclatée est utilisée, une nouvelle tranche est créée avec les éléments de la tranche éclatée. Cependant, lorsqu'une tranche normale est passée à l'aide de ..., aucune nouvelle tranche n'est créée. Au lieu de cela, la référence à la tranche existante est passée.
Dans l'exemple ci-dessus, nous essayons de spécifier la valeur d'un ou plusieurs paramètres variadiques en utilisant à la fois une tranche éclatée et un paramètre régulier ("bar") . Ce mélange de méthodes n'est pas autorisé par la spécification du langage Go.
Pour résoudre ce problème, il faut choisir entre éclater la tranche ou l'utiliser comme paramètre régulier. Par exemple :
// Explode the slice before passing to the variadic function foo("bar", stuff[0], stuff[1]) // Pass the slice as a single argument foo(append([]string{"bar"}, stuff...))
En comprenant les limites des arguments variadiques dans Go, les développeurs peuvent éviter des erreurs potentielles lors du mélange de différents types de paramètres.
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!