Retorno de múltiples valores
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 56 de 109.
Las funciones de Go pueden devolver múltiples valores a la vez, lo cual es extremadamente útil para devolver tanto resultados como información de errores.
Crea una función que devuelva tanto el cociente como el resto:
func divide(a, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}
func main() {
q, r := divide(7, 3)
fmt.Println("7 ÷ 3 =", q, "with remainder", r)
}Cuando ejecutas este programa, este produce:
7 ÷ 3 = 2 with remainder 1La función devuelve dos valores separados por comas, y capturamos ambos valores utilizando múltiples variables en la asignación.
Si solo necesitas uno de los valores devueltos, puedes usar el identificador en blanco _ para ignorar el otro. Por ejemplo, para obtener solo el cociente:
q, _ := divide(7, 3)
fmt.Println("Quotient:", q)El _ descarta el resto para que el compilador no se queje de una variable no utilizada.
Desafío
PrincipianteEn este desafío, practicarás cómo devolver múltiples valores desde una función en Go.
Tenemos una función llamada getPersonInfo que debe devolver el nombre, la edad y si es estudiante una persona. Tu tarea es completar la función agregando la sentencia de retorno adecuada.
Hoja de referencia
Las funciones en Go pueden devolver múltiples valores a la vez. Especifica múltiples tipos de retorno entre paréntesis y devuelve múltiples valores separados por comas:
func divide(a, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}Captura múltiples valores de retorno utilizando múltiples variables en la asignación:
q, r := divide(7, 3)Pruébalo tú mismo
package main
import "fmt"
// Esta función debe devolver tres valores: name, age y isStudent
func getPersonInfo() (string, int, bool) {
// Las variables ya están definidas para ti
name := "Alex"
age := 25
isStudent := true
// TODO: Devolver los tres valores (name, age, isStudent)
}
func main() {
// Llamar a la función y almacenar los valores devueltos
name, age, isStudent := getPersonInfo()
// Imprimir los valores
fmt.Printf("Name: %s\n", name)
fmt.Printf("Age: %d\n", age)
fmt.Printf("Is Student: %t\n", isStudent)
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisiones