A interface
básicamente é como se fosse um contrato as para funções que o recebem.
Para implementar uma interface
primeiro precisamos declarar-la:
type Ser interface {
Respirar() bool
}
Criando nossos tipos:
type (
Humano struct {}
Cachorro struct {}
Pedra struct {}
)
func (h Humano) Respirar() bool {
return false
}
func (c Cachorro) Respirar() bool {
return true
}
Agora criaremos uma função onde somente os Seres vivos
podem recebidos:
func VerificandoSeEstaVivo(s Ser) {
if s.Respirar() {
fmt.Println("Está vivo.")
} else {
fmt.Println("Não está vivo.")
}
}
Agora vamos verificar nossos tipos:
humano := Humano{}
cachorro := Cachorro{}
pedra := Pedra{}
VerificandoSeEstaVivo(humano) // Não está vivo.
VerificandoSeEstaVivo(cachorro) // Está vivo.
VerificandoSeEstaVivo(pedra) // erro: O tipo Pedra não é um Ser