Maison >développement back-end >Golang >Comment gérer plusieurs valeurs de retour lors du passage à des fonctions variadiques dans Go ?

Comment gérer plusieurs valeurs de retour lors du passage à des fonctions variadiques dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-18 21:56:14708parcourir

How to Handle Multiple Return Values When Passing to Variadic Functions in Go?

Valeurs de retour multiples avec fonctions variadiques

Supposons que vous ayez une fonction Go qui renvoie plusieurs valeurs entières, telles que :

func temp() (int, int) {
    return 1, 1
}

Intuitivement, vous souhaiterez peut-être transmettre directement le résultat de temp à Printf et imprimer les deux valeurs en utilisant une chaîne formatage :

fmt.Printf("first= %d and second = %d", temp())

Cependant, cette approche ne fonctionne pas car temp renvoie deux valeurs, alors que Printf n'en attend qu'une.

La raison de cette limitation réside dans la spécification de l'appel de la fonction Go. Il indique que si une fonction a un paramètre final ... (comme le fait Printf), seules les valeurs de retour restantes d'une autre fonction peuvent lui être attribuées. Cela implique que l'autre fonction doit avoir au moins une valeur de retour.

Utilisation de l'interpolation de chaîne

Au lieu d'utiliser Printf, vous pouvez tirer parti de l'interpolation de chaîne pour atteindre votre objectif :

a, b := temp()
fmt.Println("first=", a, "and second =", b)

Enveloppement des valeurs de retour

À Si vous transmettez plusieurs valeurs de retour à une fonction variadique comme Printf, vous pouvez utiliser une fonction utilitaire appelée wrap. Il prend un nombre arbitraire de valeurs d'interface{} et renvoie une tranche de valeurs d'interface{} :

func wrap(vs ...interface{}) []interface{} {
    return vs
}

Avec cet utilitaire, vous pouvez transmettre les valeurs de retour de toute fonction qui a au moins une valeur de retour à enveloppez et utilisez la tranche résultante pour appeler Printf:

fmt.Printf("1: %v, 2: %v\n", wrap(oneInt())...)
fmt.Printf("1: %v, 2: %v\n", wrap(twoInts())...)
fmt.Printf("1: %v, 2: %v, 3: %v\n", wrap(threeStrings())...)

où oneInt, twoInts et threeStrings sont des fonctions renvoyant des entiers simples, des tuples de des entiers et des tuples de chaînes, respectivement.

Cette approche contourne la restriction de transmettre une seule valeur de retour aux fonctions variadiques, vous permettant d'imprimer les multiples valeurs de retour de vos fonctions comme vous le souhaitez.

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