Funciones y retornos Multiples
En Go, las funciones son "ciudadanos de primera clase" (First-class citizens). Esto significa que pueden ser asignadas a variables, pasadas como argumentos y retornadas por otras funciones.
1. Anatomía de una Función
A diferencia de Java, el tipo de dato va después del nombre del parámetro.
func sumar(a int, b int) int {
return a + b
}
2. El Superpoder: Retornos Múltiples
Esta es la característica más icónica de Go. Se usa casi siempre para devolver un resultado y un error al mismo tiempo.
func dividir(dividendo, divisor float64) (float64, error) {
if divisor == 0 {
return 0, fmt.Errorf("no puedes dividir por cero")
}
return dividendo / divisor, nil
}
func main() {
res, err := dividir(10, 2)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Resultado:", res)
}
[!IMPORTANT] En Go, no usamos
try-catch. Usamos retornos múltiples para obligar al programador a lidiar con el error en el momento.
3. Retornos Nombrados (Named Returns)
Puedes pre-declarar las variables que vas a retornar en la firma de la función. Esto hace que el código sea más legible en funciones cortas.
Go
func rectangulo(largo, ancho float64) (area, perimetro float64) {
area = largo * ancho
perimetro = (largo + ancho) * 2
return // Retorna automáticamente area y perimetro
}
4. Funciones Variádicas
Son funciones que aceptan un número indefinido de argumentos (como fmt.Println). Se usa el prefijo ...
func sumarTodo(numeros ...int) int {
total := 0
for _, n := range numeros {
total += n
}
return total
}
5. Funciones Anónimas y Closures
Puedes declarar una función sin nombre dentro de otra y ejecutarla al instante o guardarla en una variable.
func main() {
saludo := func(nombre string) {
fmt.Printf("Hola %s desde una función anónima\n", nombre)
}
saludo("Miguel")
}
💡 Conexión con las Interfaces1
-
Una interfaz define firmas de funciones.
-
Si una función de interfaz dice que devuelve
(string, error), tu struct debe tener un método que devuelva exactamente eso.
Ver [[04_Interfaces|Interfaces]] para mayor información