Contenido del curso
Fundamentos de Go
Estructuras de Datos y Funciones
- 8

Sentencia switch en Go con ejemplos reales
07:16 min - 9

Arreglos en Go: fijos e inferidos
06:55 min - 10

Creación y uso de slices dinámicos en Go
08:25 min - 11

Mapas en Go: creación, acceso y manipulación de datos clave-valor
09:37 min - 12

Cómo crear y usar funciones personalizadas en Go
07:09 min - 13

Retorno de múltiples valores en Go
07:43 min - 14

Funciones variadic en Go con tres puntos
Viendo ahora - 15

Funciones recursivas en Go con Fibonacci
06:11 min - 16

Punteros en Go para optimizar rendimiento del sistema
05:19 min - 17

Runas en Go: bytes vs caracteres reales
06:40 min - 18

Declaración y uso de estructuras de datos en Go
09:06 min - 19

Implementación de enumeradores en Go para controlar estados
09:32 min
Manejo de Errores y Concurrencia
Buenas Prácticas en Go
Funciones variadic en Go con tres puntos
Resumen
Las funciones variadic en Go te permiten recibir una cantidad indefinida de parámetros del mismo tipo dentro de una sola función, sin tener que duplicar código para cada caso. Si alguna vez creaste una función suma y luego una sumaLarga para más argumentos, esta es la solución que te ahorra líneas y mantiene tu código limpio.
¿Qué es una función variadic en Go y por qué deberías usarla?
Una función variadic acepta un número variable de argumentos del mismo tipo. En lugar de fijar dos, tres o cinco parámetros, declaras uno solo precedido por tres puntos ... y Go se encarga de tratarlo como un slice internamente.
El ejemplo más conocido lo usas todos los días: fmt.Println. Puedes pasarle un solo string como "Hello, world", o combinarlo con variables como name y age, y la función responde igual de bien con uno, dos o cinco elementos.
¿Qué significa el operador
...en Go? Indica que el parámetro acepta cero o más valores del tipo declarado. Internamente, Go los empaqueta como un slice que puedes recorrer confor range.
¿Cómo se declara una función variadic paso a paso?
La sintaxis es directa: declaras el parámetro con tres puntos antes del tipo. Así le dices al compilador que ese argumento puede recibir cualquier cantidad de valores.
Mira cómo se ve una función sum que acepta enteros indefinidos:
go func sum(numbers ...int) { fmt.Println(numbers) total := 0 for _, number := range numbers { total = total + number } fmt.Println("La suma es", total) }
Dentro de la función, numbers se comporta como un slice. Por eso puedes recorrerlo con for range, ignorando el índice con el guion bajo _ y acumulando cada valor en total.
¿Cómo invocas una función variadic con valores sueltos?
La llamas como cualquier función, pero pasando los argumentos separados por coma. No hay un límite fijo: puedes mandar dos, tres o los que necesites.
sum(1, 2)devuelve la suma 3.sum(1, 2, 3)devuelve 6.sum(10, 20, 30, 40)devuelve 100.
Cada llamada usa la misma función, sin sobrecargas ni versiones alternativas.
¿Cómo paso un array o slice a una función variadic?
Aquí viene lo interesante. Si ya tienes un slice con los valores, no necesitas extraerlos uno por uno. Usas el operador ... al momento de la llamada para expandirlos.
go numbers := []int{1, 2, 3, 4, 5} sum(numbers...)
Esa expansión le dice a Go: "toma cada elemento del slice y pásalo como argumento individual". El resultado de ese ejemplo es 15.
¿Cuándo conviene usar una función variadic en tus proyectos?
La pista está en cuántas versiones de la misma función estás creando. Si te encuentras escribiendo suma, sumaLarga y luego sumaMasLarga, es señal de que necesitas una variadic.
¿Cuál es la diferencia entre una función normal y una variadic? La normal exige una cantidad exacta de parámetros. La variadic acepta desde cero hasta los que quieras, todos del mismo tipo, agrupados como slice.
Algunos escenarios donde brillan:
- Funciones de logging o impresión donde no sabes cuántos valores vas a mostrar.
- Operaciones matemáticas como sumas, promedios o máximos sobre cantidades dinámicas.
- Constructores que reciben una lista opcional de configuraciones.
El propio fmt.Println es la prueba viva de cuán versátil resulta esta característica: una sola función adaptándose a prácticamente cualquier entrada.
¿Qué pasa dentro de la función cuando recibes los parámetros?
Go convierte automáticamente los argumentos en un slice del tipo declarado. Eso significa que puedes usar todas las herramientas que ya conoces: len() para contar, for range para iterar, indexación directa, etc.
En el ejemplo de sum, el for _, number := range numbers ignora el índice con _ (el famoso guion bajo para saltar el primer valor del rango) y acumula cada número en total. Al final, fmt.Println("La suma es", total) imprime el resultado.
Practica creando tus propias variadic: una que concatene strings, otra que encuentre el valor máximo, una más que reciba structs. Cada vez que reduzcas funciones duplicadas, vas a sentir el ahorro real en tu base de código.
¿Ya identificaste en tu proyecto actual alguna función que podrías refactorizar como variadic? Cuéntame en los comentarios cuál fue y cuántas líneas te ahorraste.