Maison >développement back-end >Golang >« fmt.Println » de Go peut-il gérer directement plusieurs valeurs de retour d'une fonction ?

« fmt.Println » de Go peut-il gérer directement plusieurs valeurs de retour d'une fonction ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 07:57:14285parcourir

Can Go's `fmt.Println` Handle Multiple Return Values from a Function Directly?

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!

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