Go · Essencial · Português · Técnico
interface implícita
Em Go, um tipo satisfaz uma interface apenas por ter os métodos exigidos, sem declarar 'implements'. O compilador checa a relação no uso.
Onde usar
Permite definir a interface no lado de quem consome, pequena e específica, e escrever mocks sem tocar no tipo original. Daí o lema: aceite interfaces, devolva structs.
Em código
type Speaker interface{ Speak() string }
type Cat struct{}
func (Cat) Speak() string { return "miau" }
var _ Speaker = Cat{} // checado ao compilar
var s Speaker = Cat{}
fmt.Println(s.Speak())Exemplos
Em Go a interface é implícita, basta o tipo ter o método.
Declara a interface no pacote que consome, não no que implementa.
Cuidado
Como não há declaração, um erro de assinatura só aparece onde o valor é usado; confirme antes com 'var _ I = (*T)(nil)'.
Sinônimos
duck typing estático, tipagem estrutural
Antônimos
implements explícito