Funciones variádicas
Introducción a las funciones variádicas
Las funciones variádicas en Go te permiten pasar un número variable de argumentos a una función. Proporcionan flexibilidad en el diseño de funciones y son especialmente útiles cuando no conoces el número exacto de argumentos de antemano.
Sintaxis básica
func sum(numbers...int) int {
total := 0
for _, number := range numbers {
total += number
}
return total
}
func main() {
result1 := sum(1, 2, 3)
result2 := sum(10, 20, 30, 40)
fmt.Println(result1, result2)
}
Características de las funciones variádicas
Característica |
Descripción |
Ejemplo |
Puntos suspensivos (...) |
Indica argumentos variables |
func(args...type) |
Conversión a slice |
Los argumentos se convierten en un slice |
numbers []int |
Conteo flexible de argumentos |
Se pueden pasar cero o múltiples argumentos |
sum() , sum(1,2,3) |
Mecanismo de paso de argumentos
graph LR
A[Variadic Function Call] --> B[Arguments Collected]
B --> C[Converted to Slice]
C --> D[Function Execution]
Técnicas avanzadas de funciones variádicas
Combinar parámetros fijos y variádicos
func printInfo(prefix string, values...int) {
fmt.Print(prefix + ": ")
for _, v := range values {
fmt.Print(v, " ")
}
fmt.Println()
}
func main() {
printInfo("Numbers", 1, 2, 3, 4)
}
Desempaquetado de slice
numbers := []int{1, 2, 3}
result := sum(numbers...) // Unpack slice
Casos de uso para desarrolladores de LabEx
- Funciones de registro (logging)
- Operaciones de agregación
- Métodos de configuración flexibles
- Procesamiento dinámico de argumentos
Consideraciones de rendimiento
- Las funciones variádicas crean un slice para los argumentos
- La sobrecarga es mínima para listas de argumentos pequeñas
- Para listas de argumentos grandes, considera enfoques alternativos
Manejo de errores y validación
func validatePositive(numbers...int) error {
for _, num := range numbers {
if num < 0 {
return fmt.Errorf("negative number found: %d", num)
}
}
return nil
}
Las funciones variádicas proporcionan una forma poderosa de crear funciones flexibles y dinámicas en Go, lo que permite a los desarrolladores escribir código más adaptable y conciso.