Maison >développement back-end >Golang >« fmt.Println » de Go peut-il gérer directement plusieurs valeurs de retour d'une fonction ?
Passer plusieurs valeurs de retour à des fonctions variadiques dans Go
Question :
Une fonction peut-elle renvoyant plusieurs valeurs entières soit directement transmises à fmt.Println() pour une sortie de chaîne formatée, similaire à Python ?
func temp() (int, int) { return 1, 1 } fmt.Println("first= %d and second = %d", temp()) // Not supported
Réponse :
Non, cela n'est pas directement pris en charge par défaut dans Go. Selon la spécification du langage, "Calls" attend un appel de fonction comme seul argument pour les paramètres variadiques comme ...interface{}, et les fonctions doivent avoir au moins une valeur de retour.
fmt.Printf(), cependant, autorise une chaîne de format à côté du paramètre variadique, ce qui la rend plus adaptée à cette tâche. Cependant, puisque temp() renvoie un tuple, il ne peut pas être directement passé en argument ...interface{}.
Solution :
Pour transmettre plusieurs valeurs de retour en fonction variadique, une fonction wrapper utilitaire peut être utilisée pour convertir le tuple en une tranche []interface{}, qui peut ensuite être passée comme argument variadique. Vous trouverez ci-dessous un exemple d'implémentation :
func wrap(vs ...interface{}) []interface{} { return vs }
En utilisant cette fonction wrapper, la fonction temp() peut maintenant être transmise à fmt.Printf() :
func main() { fmt.Printf("first= %v and second = %v", wrap(temp()...)...) }
Cela imprimera correctement le valeurs de temp().
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!