Pular para o conteúdo principal

victorstein.dev

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.

# Referências