Boa tarde, creio que está faltando aula do porque da composição de interface, e como chamar pela interface e não pelo tipo concreto, ou estou errado?
Boa tarde, creio que está faltando aula do porque da composição de interface, e como chamar pela interface e não pelo tipo concreto, ou estou errado?
Olá Carlos, como vai?
A composição de interfaces em Go é um conceito poderoso que permite que você crie interfaces mais complexas a partir de interfaces mais simples. Basicamente, você pode "compor" uma interface incluindo outras interfaces dentro dela. Isso é útil porque permite que você defina comportamentos que podem ser compartilhados entre diferentes tipos sem precisar duplicar código.
Por exemplo, imagine que você tem duas interfaces, Leitor
e Escritor
:
type Leitor interface {
Ler(p []byte) (n int, err error)
}
type Escritor interface {
Escrever(p []byte) (n int, err error)
}
Você pode criar uma interface LeitorEscritor
que combina as duas:
type LeitorEscritor interface {
Leitor
Escritor
}
Agora, qualquer tipo que implemente tanto Ler
quanto Escrever
também implementa LeitorEscritor
.
Quanto a chamar pela interface e não pelo tipo concreto, isso é uma prática comum em Go para promover a flexibilidade e a abstração. Ao programar para interfaces, você pode mudar a implementação subjacente sem alterar o código que usa a interface. Isso é útil para testes e para criar sistemas que são mais fáceis de manter e evoluir.
Por exemplo, se você tiver uma função que aceita um LeitorEscritor
, ela pode trabalhar com qualquer tipo que implemente essa interface, seja ele um arquivo, uma conexão de rede ou mesmo uma string buffer.
func Processar(le LeitorEscritor) {
// Implementação que usa le.Ler e le.Escrever
}
Espero que isso ajude a esclarecer um pouco sobre o uso de interfaces em Go. Se você sentir que continua faltando alguma aula ou explicação, pode ser útil revisar as seções do curso ou verificar se há materiais complementares disponíveis.