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
Susan Sarandonoriginal
2024-11-11 02:57:03194parcourir

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...)

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!

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