Middle
Como são implementados os conceitos de programação orientada a objetos (POO) na linguagem Go?
sobes.tech IA
Resposta da IA
No Go, não existem conceitos clássicos de classes, herança e métodos virtuais que são comuns em outras linguagens (Java, C++). A programação orientada a objetos é implementada através de:
- Estruturas (Structs): Agrupam dados (campos).
type Person struct { Name string Age int } - Métodos: Funções com um receptor associado (estrutura ou outro tipo). Permitem que as estruturas tenham comportamento.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Receptor por valor: O método trabalha com uma cópia da estrutura. As alterações dentro do método não afetam a estrutura original.
- Receptor por ponteiro: O método trabalha com a estrutura original através de um ponteiro. As alterações dentro do método afetam a estrutura original.
- Interfaces: Definem um conjunto de assinaturas de métodos que um tipo deve implementar. Proporcionam polimorfismo "por tipagem de pato" (
duck typing). Um tipo implementa implicitamente uma interface se implementar todos os seus métodos.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Incorporação (Embedding): Permite que uma estrutura "incorpore" outra estrutura ou interface. Isto não é herança no sentido clássico, mas sim composição. A estrutura incorporada torna-se um campo anônimo, e seus campos e métodos podem ser acessados diretamente através da instância da estrutura que a incorpora.
type Employee struct { Person // estrutura incorporada ID string } // Employee agora possui os campos Name e Age, além do método Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // chamada ao método Greet() de Person através de Employee
| Conceito de POO | Implementação em Go | Observações |
|---|---|---|
| Classes | Estruturas | Não há uma palavra-chave explícita class |
| Encapsulamento | Campos/métodos exportáveis (com letra maiúscula) / não exportáveis (com letra minúscula) | Controle de visibilidade ao nível do pacote |
| Herança | Incorporação (Embedding) | Composição em vez de herança hierárquica |
| Polimorfismo | Interfaces | Tipagem de pato, implementação implícita de interfaces |