Les fonctions variadiques dans Go acceptent un nombre variable d'arguments, qui sont stockés sous forme de tranche du type spécifié. Lors de l'appel d'une fonction variadique, il est essentiel de comprendre comment les arguments sont transmis.
Considérez le code suivant qui tente de créer un wrapper autour de fmt.Fprintf. avec des arguments de longueur variable :
func Die(format string, args ...interface{}) { str := fmt.Sprintf(format, args) fmt.Fprintf(os.Stderr, "%v\n", str) os.Exit(1) }
Lors de l'appel de Die("foo"), la sortie contient l'inattendu "%%!(EXTRA []interface {}=[])".
Le problème survient lors du passage de la tranche d'arguments directement à fmt .Sprintf. Pour transmettre correctement les arguments individuellement, l'opérateur points de suspension ... doit être utilisé :
package main import ( "fmt" "os" ) func Die(format string, args ...interface{}) { str := fmt.Sprintf(format, args...) fmt.Fprintf(os.Stderr, "%v\n", str) os.Exit(1) } func main() { Die("foo") }
En utilisant ..., chaque élément de la tranche args est passé comme argument distinct à fmt.Sprintf, résolvant le problème et produire le résultat attendu :
foo
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!