Parámetros de tipo y restricciones en Go
Una restricción dice qué debe soportar el tipo, y any es la más laxa.
type Number interface {
~int | ~int64 | ~float64
}
func Sum[T Number](values []T) T {
var total T
for _, value := range values {
total += value
}
return total
}
func Max[T cmp.Ordered](values []T) (T, bool) {
var best T
if len(values) == 0 {
return best, false
}
best = values[0]
for _, value := range values[1:] {
if value > best {
best = value
}
}
return best, true
}
func Unique[T comparable](values []T) []T {
seen := make(map[T]struct{}, len(values))
var out []T
for _, value := range values {
if _, ok := seen[value]; !ok {
seen[value] = struct{}{}
out = append(out, value)
}
}
return out
}
Cómo funciona
comparablepermite == y claves de mapa.cmp.Orderedpermite < y >.- Una restricción de unión lista los tipos que aceptas.
Palabras clave y builtins usados aquí
appendboolcomparablefloat64forfuncifintint64interfacelenmakemaprangereturnstructtypevar
El intento, en números
- Líneas
- 37
- Caracteres a escribir
- 599
- Tokens
- 196
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 107 segundos.
Paso 2 de 4 en Genéricos; paso 14 de 19 en Interfaces y genéricos.