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 ?

Les tranches éclatées et les paramètres réguliers peuvent-ils être combinés dans les fonctions variadiques de Go ?

DDD
DDDoriginal
2024-12-11 05:40:14816parcourir

Can Exploded Slices and Regular Parameters Be Combined in Go's Variadic Functions?

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!

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