Junior
O que são interfaces na linguagem Go?
sobes.tech IA
Resposta da IA
A interface em Go é uma coleção de assinaturas de métodos. Ela define o comportamento de um objeto: o que ele "pode fazer". A interface não contém dados nem implementações de métodos.
Características principais:
- Implementação implícita: Um tipo implementa uma interface implicitamente se fornecer todos os métodos declarados na interface. Não é necessário declarar explicitamente que um tipo implementa a interface.
- "Tipagem de pato" (Duck Typing): "Se faz quack como um pato e caminha como um pato, então é um pato". Em Go, o tipo do objeto não importa, desde que implemente o conjunto necessário de métodos.
- Valor zero: O valor zero de uma interface é
nil. O valor de uma interface pode sernilse tanto o tipo quanto o valor dentro dela foremnil. - Interface vazia (
interface{}ouany): Pode conter um valor de qualquer tipo. Frequentemente usada para trabalhar com dados de tipos desconhecidos ou em contêineres genéricos.
Exemplo de definição e uso:
// Definindo a interface Greeter
type Greeter interface {
Greet() string // Método Greet que retorna uma string
}
// Definindo o tipo Person
type Person struct {
Name string
}
// Person implementa a interface Greeter, fornecendo o método Greet
func (p Person) Greet() string {
return "Olá, " + p.Name
}
// Definindo o tipo Robot
type Robot struct {
Model string
}
// Robot também implementa a interface Greeter
func (r Robot) Greet() string {
return "Saudações, modelo " + r.Model
}
// A função aceita uma interface Greeter
func SayHello(g Greeter) {
fmt.Println(g.Greet()) // Chama o método Greet através da interface
}
func main() {
person := Person{Name: "Alicia"}
robot := Robot{Model: "RX-800"}
SayHello(person) // Passa um Person que implementa Greeter
SayHello(robot) // Passa um Robot que implementa Greeter
}
Interfaces promovem um design flexível e desacoplado, permitindo escrever funções que trabalham com diferentes tipos de dados, desde que esses tipos implementem a interface necessária. Elas são usadas para criar código genérico e na biblioteca padrão do Go (por exemplo, io.Reader, io.Writer, fmt.Stringer).