Sobes.tech
Middle+

O que são interfaces em Go? O que é duck typing?

sobes.tech IA

Resposta da IA

Em Go, as interfaces definem um conjunto de métodos que um tipo deve implementar para ser considerado compatível com essa interface. É importante notar que a implementação de interfaces em Go não requer uma declaração explícita: se um tipo implementa todos os métodos da interface, ele é automaticamente considerado como a implementando.

O duck typing é um conceito segundo o qual o tipo de um objeto é determinado não pela sua declaração explícita, mas pela presença de certos métodos ou propriedades. No contexto de Go, isso significa que se um objeto "quacua como um pato e anda como um pato", então ele é um pato, ou seja, se um tipo implementa os métodos de uma interface, ele se encaixa nessa interface.

Exemplo de interface e implementação em Go:

package main
import "fmt"

type Speaker interface {
    Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
    return "Woof!"
}

type Cat struct {}

func (c Cat) Speak() string {
    return "Meow!"
}

func saySomething(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    d := Dog{}
    c := Cat{}
    saySomething(d) // Woof!
    saySomething(c) // Meow!
}

Aqui, Dog e Cat implementam a interface Speaker sem declararem explicitamente, mas graças à presença do método Speak(). Este é um exemplo de duck typing em Go.