0Pricing
Go Academy · Lección

Sintaxis de los parámetros de tipo

Funciones y tipos genéricos con [T any]

Sintaxis de los parámetros de tipo es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Contexto de los genéricos

Antes de Go 1.18, el código que funcionaba con varios tipos requería usar interface{}/any (con pérdida de seguridad de tipos) o generar código. Los genéricos añaden parámetros de tipo para permitir el polimorfismo en tiempo de compilación.

Sintaxis de las funciones genéricas

Declare los parámetros de tipo entre corchetes después del nombre de la función:

func Map[T, U any](s []T, f func(T) U) []U {
    result := make([]U, len(s))
    for i, v := range s {
        result[i] = f(v)
    }
    return result
}

nums := Map([]int{1,2,3}, func(n int) string {
    return strconv.Itoa(n)
})

Inferencia de tipos

En la mayoría de los casos, el compilador infiere los argumentos de tipo a partir de los argumentos de la función. Puede especificarlos explícitamente si la inferencia falla.

// Inferred:
nums := Map([]int{1,2,3}, strconv.Itoa)
// Explicit:
nums := Map[int, string]([]int{1,2,3}, strconv.Itoa)

Tipos genéricos

Las estructuras y otros tipos también pueden tener parámetros de tipo:

type Stack[T any] struct {
    items []T
}
func (s *Stack[T]) Push(v T) { s.items = append(s.items, v) }
func (s *Stack[T]) Pop() (T, bool) {
    if len(s.items) == 0 { var zero T; return zero, false }
    n := len(s.items)-1
    v := s.items[n]
    s.items = s.items[:n]
    return v, true
}

Varios parámetros de tipo

Las funciones y los tipos pueden tener varios parámetros de tipo:

type Pair[K, V any] struct { Key K; Value V }

func Zip[K, V any](keys []K, vals []V) []Pair[K, V] {
    result := make([]Pair[K, V], min(len(keys), len(vals)))
    for i := range result {
        result[i] = Pair[K, V]{keys[i], vals[i]}
    }
    return result
}

Valor cero del parámetro de tipo

Declare una variable con el valor cero mediante var zero T. Esto es necesario al devolver un resultado de "sin valor" desde una función genérica.

func First[T any](s []T) (T, bool) {
    if len(s) == 0 { var zero T; return zero, false }
    return s[0], true
}

Métodos en tipos genéricos

Los métodos de un tipo genérico usan los parámetros del tipo, no parámetros propios. Un método no puede introducir parámetros de tipo adicionales.

type Pair[K, V any] struct{ K K; V V }
func (p Pair[K, V]) Swap() Pair[V, K] { return Pair[V, K]{p.V, p.K} }

Instanciación

Usar un tipo genérico con un argumento de tipo concreto se denomina instanciación. Ocurre en tiempo de compilación, no en tiempo de ejecución: no hay sobrecoste de boxing.

s := Stack[int]{}
s.Push(42)

Alias de tipos y tipos genéricos

Puede crear alias de tipos genéricos instanciados:

type IntStack = Stack[int]

Limitaciones

Los parámetros de tipo no se pueden usar con type switches ni con aserciones de tipo. Los métodos de tipos genéricos no pueden tener parámetros de tipo adicionales. Los genéricos no se pueden usar con tipos cuyos operadores estén sobrecargados sin restricciones.

Cuándo usar genéricos

Use genéricos para algoritmos realmente independientes del tipo (tipos contenedor y ayudantes funcionales como Map/Filter/Reduce) cuando la alternativa sea duplicar código o realizar conversiones no seguras.

Comprobación rápida

¿Dónde se declaran los parámetros de tipo en una función genérica?

Resumen: sintaxis de los parámetros de tipo

Puntos clave:

  • Parámetros de tipo entre corchetes: func Foo[T any](...)
  • Funcionan con funciones y tipos (estructuras, etc.)
  • En la mayoría de los casos, el compilador infiere los argumentos de tipo a partir de los argumentos
  • Valor cero: var zero T; no hay parámetros de tipo a nivel de método

Preguntas frecuentes

¿La lección «Sintaxis de los parámetros de tipo» es gratis?

Sí — el texto completo de «Sintaxis de los parámetros de tipo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Sintaxis de los parámetros de tipo»?

Funciones y tipos genéricos con [T any] Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Sintaxis de los parámetros de tipo»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Sintaxis de los parámetros de tipo
  2. Restricciones: comparable e interfaces
  3. Estructuras de datos genéricas
  4. Genéricos en la práctica: dificultades
← Volver a Go Academy