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
Libérer: 2024-12-18 21:56:14
original
707 Les gens l'ont consulté

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
}
Copier après la connexion

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())
Copier après la connexion

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)
Copier après la connexion

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
}
Copier après la connexion

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())...)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal