10/100 Dias de Golang - Interfaces
Table of Contents
#
Interfaces
Interfaces são um conceito muito presente em linguagem com orientação a objetos, de forma geral, as interfaces são um contrato que outras estruturas podem assinar, garantindo que elas implementem os métodos definidos na interface. Diferente de outras linguagens, como Java ou C#, Go implementa um modelo de interface implícita, onde qualquer tipo que implementa os métodos exigidos automaticamente implementa a interface. Veja como declaramos uma inteface:
type Animal interface {
EmitirSom() string
}
Agora vamos criar duas structs que implementam a interface Animal
, veja que em nenhum momento estamos dizendo que a struct implementa a interface.
type Cachorro struct {
Nome string
}
func (c Cachorro) EmitirSom() string {
return "Au Au"
}
type Gato struct {
Nome string
}
func (g Gato) EmitirSom() string {
return "Miau"
}
Agora vamos criar uma função que recebe um tipo Animal
e chama o método EmitirSom
.
func EmitirSom(e Animal) {
fmt.Println(e.EmitirSom())
}
No nosso main, vamos criar um cachorro e um gato e chamar a função EmitirSom
passando cada um deles.
func main() {
cachorro := Cachorro{Nome: "Rex"}
gato := Gato{Nome: "Garfield"}
EmitirSom(cachorro)
EmitirSom(gato)
}
#
Interfaces Vazias
Go também possui um tipo de interface especial chamada de interface vazia, que é uma interface sem métodos. Ela é usada para representar qualquer tipo de valor. Veja um exemplo:
func Print(v interface{}) {
fmt.Println(v)
}
func main() {
Print(1)
Print("Olá")
Print(true)
}
Isso é útil para funções genéricas, mas deve ser utilizado com muito cuidado, pois reduz a segurança de tipo.