10/100 Dias de Golang - Interfaces
Table of Contents
#
Interfaces
Interfaces são um conceito muito presente em linguagens 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. Diferentemente de outras linguagens, como Java ou C#, Go adota um modelo de interface implícita, no qual qualquer tipo que implemente os métodos exigidos automaticamente satisfaz a interface.
type Animal interface {
EmitirSom() string
}
Agora, vamos criar duas structs que implementam a interface Animal. Note que, em nenhum momento, precisamos declarar explicitamente 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.