Interfaces y Genéricos
Interfaces y parámetros de tipo para APIs flexibles. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Busca en todas las páginas de la documentación
Interfaces y parámetros de tipo para APIs flexibles. Los resultados aparecen en la misma sección de código: comentarios // en la misma línea cuando son cortos, bloques // multilínea debajo de la muestra cuando no lo son.
Los tipos satisfacen interfaces por su conjunto de métodos; no hay palabra clave implements.
type Stringer interface{ String() string }
type N int
func (n N) String() string { return fmt.Sprintf("%d", n) }
var s Stringer = N(3)
s.String() // "3"Extrae el tipo concreto de una interfaz.
var i any = "hi"
s, ok := i.(string)
s // "hi"
// ok == trueRama basada en el tipo dinámico.
var i any = 7
s := ""
switch v := i.(type) {
case int:
s = fmt.Sprintf("int %d", v)
default:
s = "other"
}
s // "int 7"Parámetros de tipo entre corchetes.
func First[T any](xs []T) (T, bool) {
if len(xs) == 0 {
var z T
return z, false
}
return xs[0], true
}
v, ok := First([]int{9, 8})
v // 9
// ok == trueRestringe con interfaces / comparable.
func Max[T ~int | ~float64](a, b T) T {
if a > b { return a }
return b
}
Max(3, 5) // 5anyany es un alias de interface{}.
var x any = 1
x // 1Una interfaz es nil solo si tanto el tipo como el valor son nil.
var p *int
var i any = p
i == nil // false (nil tipado)Restricción comparable para claves de mapa.
func Has[K comparable, V any](m map[K]V, k K) bool {
_, ok := m[k]
return ok
}
Has(map[string]int{"a": 1}, "a") // trueEstructuras parametrizadas.
type Pair[T any] struct{ A, B T }
Pair[int]{1, 2}.A // 1Los métodos pueden usar los parámetros de tipo del tipo receptor.
type Box[T any] struct{ V T }
func (b Box[T]) Get() T { return b.V }
Box[string]{V: "x"}.Get() // "x"Componer interfaces.
type ReadWriter interface {
io.Reader
io.Writer
}
// los tipos que implementan ambas satisfacen ReadWriterAceptar interfaces, devolver estructuras (idioma).
// func Save(s Store) error
// preferir interfaces diminutas en los puntos de llamada~ incluye tipos subyacentes.
type ID int
func F[T ~int](v T) T { return v }
F(ID(2)) // 2| en conjuntos de tipos de interfaz.
type Number interface{ ~int | ~float64 }
func Dbl[T Number](v T) T { return v + v }
Dbl(2.5) // 5Comprueba el puntero antes de insertarlo en una interfaz.
var err error
err == nil // trueerrorVersiones de Stack: Go 1.26.x · chi/gin/echo latest (verificar en la compilación)
Revisado por Chris St. John·Última actualización: 18 jul 2026