typestar

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

  1. comparable permite == y claves de mapa.
  2. cmp.Ordered permite < y >.
  3. Una restricción de unión lista los tipos que aceptas.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 4 en Genéricos; paso 14 de 19 en Interfaces y genéricos.

← Anterior Siguiente →