Maison > développement back-end > Golang > Pourquoi « foo%!(EXTRA []interface {}=[]) » apparaît-il lors de l'appel d'un wrapper `fmt.Fprintf` avec des arguments variadiques ?

Pourquoi « foo%!(EXTRA []interface {}=[]) » apparaît-il lors de l'appel d'un wrapper `fmt.Fprintf` avec des arguments variadiques ?

Susan Sarandon
Libérer: 2024-11-11 02:57:03
original
169 Les gens l'ont consulté

Why does

Problème de transmission d'arguments de fonction variadique dans le wrapper fmt.Fprintf

Cet article résout un problème rencontré lors de la création d'un simple wrapper fmt.Fprintf qui accepte un nombre variable d'arguments.

Problème : sortie incorrecte lors de l'appel de Wrapper

Lors de l'appel de la fonction wrapper Die("foo"), une sortie inattendue est produite : "foo%!(EXTRA []interface {}=[])". Cela soulève deux questions :

  • Pourquoi ce texte supplémentaire apparaît-il après "foo" ?
  • Quelle est la bonne façon de créer des wrappers autour de fmt.Fprintf ?

Solution : Utilisation de l'opérateur Spread

Les fonctions variadiques dans Go reçoivent des arguments sous forme de tranche. Dans ce cas, la fonction wrapper Die a un paramètre args de type []interface{}. Cependant, lors de la transmission de cet argument à fmt.Sprintf, il est traité comme un argument unique de type []interface{}.

Pour résoudre ce problème et transmettre chaque valeur dans args en tant qu'argument distinct, l'opérateur de propagation (...) doit être utilisé. En ajoutant cette syntaxe à l'appel fmt.Sprintf, les valeurs individuelles dans args sont développées et transmises en conséquence :

str := fmt.Sprintf(format, args...)
Copier après la connexion

Cette approche garantit que la fonction wrapper transmet correctement les arguments de la variable à fmt.Fprintf.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal