0Pricing
Go Academy · Lección

Restricciones: comparable e interfaces

Restricciones de unión y el tipo integrado comparable

Restricciones: comparable e interfaces es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 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.

¿Qué es una restricción?

Una restricción limita los tipos que se pueden usar como argumento de tipo. Sin una restricción, el parámetro de tipo es any (la interfaz vacía; solo admite asignación y comparación mediante ==).

La restricción any

any (alias de interface{}) es la restricción más amplia: todos los tipos la satisfacen. Solo puede usar operaciones compatibles con todos los tipos: asignación y paso a parámetros de interfaz.

func Print[T any](v T) { fmt.Println(v) }

La restricción comparable

comparable limita el parámetro de tipo a los tipos compatibles con == y !=. Es necesaria para usar el tipo como clave de un map o en comprobaciones de igualdad.

func Contains[T comparable](s []T, v T) bool {
    for _, item := range s {
        if item == v { return true }
    }
    return false
}

Restricciones de interfaz

Use una interfaz como restricción para exigir métodos concretos. El parámetro de tipo debe tener todos los métodos de la interfaz.

type Stringer interface { String() string }

func Print[T Stringer](v T) {
    fmt.Println(v.String())
}

Restricciones de unión

Use una unión de tipos con | para limitar el conjunto de tipos concretos permitidos. Esto permite usar operadores (como +) que no forman parte de ninguna interfaz.

type Number interface {
    int | int64 | float64
}

func Sum[T Number](s []T) T {
    var total T
    for _, v := range s { total += v }
    return total
}

~T para tipos subyacentes

Utilice ~T para incluir no solo T, sino todos los tipos cuyo tipo subyacente sea T (por ejemplo, tipos personalizados definidos como type MyInt int).

type Integer interface { ~int | ~int64 }

type MyInt int
// MyInt satisfies Integer because its underlying type is int

golang.org/x/exp/constraints

El paquete constraints proporciona interfaces de restricción comunes: Ordered (admite <), Integer, Float, Signed y Unsigned.

import "golang.org/x/exp/constraints"

func Min[T constraints.Ordered](a, b T) T {
    if a < b { return a }
    return b
}

Paquete cmp (Go 1.21)

Go 1.21 añadió la restricción cmp.Ordered y las funciones cmp.Compare/cmp.Less a la biblioteca estándar, sustituyendo la dependencia exp/constraints.

import "cmp"
func Min[T cmp.Ordered](a, b T) T { return min(a, b) }

Combinación de restricciones

Incluya varias interfaces en una restricción para exigir varias propiedades:

type Printable interface {
    comparable
    fmt.Stringer
}

Inferencia de restricciones

El compilador infiere los parámetros de tipo a partir de los argumentos. Si la restricción es demasiado amplia (any), puede ser necesario especificar explícitamente los argumentos de tipo para orientar la inferencia.

Cuándo utilizar comparable

Utilice comparable cuando la función genérica necesite usar == con valores, almacenarlos como claves de mapas o utilizarlos como elementos de mapas o conjuntos. No todos los tipos son comparables (los slices, mapas y funciones no lo son).

Comprobación rápida

¿Qué significa el prefijo ~ en una restricción de unión como ~int?

Resumen: restricciones

Puntos clave:

  • any: el más amplio; comparable: admite ==; interface: requiere métodos
  • La unión (int|float64) permite utilizar operadores aritméticos
  • ~T incluye tipos con nombre cuyo tipo subyacente es T
  • cmp.Ordered (Go 1.21 o posterior) para restricciones con <, >, <= y >=

Preguntas frecuentes

¿La lección «Restricciones: comparable e interfaces» es gratis?

Sí — el texto completo de «Restricciones: comparable e interfaces» 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 «Restricciones: comparable e interfaces»?

Restricciones de unión y el tipo integrado comparable 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 2 de 4.

¿Cuánto tiempo toma la lección «Restricciones: comparable e interfaces»?

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