Las interfaces se satisfacen implícitamente en Go
Sin palabra clave implements: el tipo tiene los métodos, así que encaja.
type Scorer interface {
Score() int
}
type Snippet struct{ Lines int }
type Script struct{ Lines int }
func (s Snippet) Score() int { return s.Lines }
func (s Script) Score() int { return s.Lines * 2 }
var _ Scorer = Snippet{} // no compila si falta el método
func total(items []Scorer) int {
sum := 0
for _, item := range items {
sum += item.Score()
}
return sum
}
Cómo funciona
- La interfaz puede declararse después de los tipos que la satisfacen.
- Las interfaces pequeñas son el hábito de Go — a menudo un solo método.
- Una aserción en tiempo de compilación documenta la intención.
Palabras clave y builtins usados aquí
forfuncintinterfacerangereturnstructtypevar
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 370
- Tokens
- 95
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 57 segundos.
Paso 2 de 4 en Interfaces; paso 5 de 19 en Interfaces y genéricos.