Go — Interfaces e composição
TL;DR
Galho 3 da trilha Go — como Go faz polimorfismo sem herança: interfaces implícitas (satisfação estrutural), o
any/type assertions e o idioma “accept interfaces, return structs” (Iniciado/Adepto); embedding de interfaces e as pegadinhas deio.Reader/io.Writer(Adepto); o nil interface/typed-nil e design idiomático de interfaces pequenas (Magus). Ao fim, você projeta contratos desacoplados do tipo concreto — o jeito Go de fazer abstração.
Aqui o Go completa a aposta do galho 2: comportamento vem de métodos, e contratos vêm de interfaces satisfeitas implicitamente — sem implements, sem hierarquia declarada. Ver roadmap pro estado das notas.
Notas por fase
Iniciado — o contrato implícito
- 01 - Interfaces implícitas e satisfação estrutural — sem
implements, duck typing estático, satisfação por método set - 02 - O empty interface e any —
interface{}/any, quando (não) usar, custo de boxing - 03 - Type assertions e type switch —
v, ok := x.(T),switch v := x.(type), panics evitáveis
Adepto — o idioma das interfaces
- 04 - Accept interfaces, return structs — por que essa regra, exceções, acoplamento em construtores
- 05 - Interfaces pequenas — io.Reader e io.Writer — o padrão stdlib, interfaces de um método, composabilidade
- 06 - Interface embedding — compor interfaces maiores a partir de menores,
io.ReadWriter
Magus — design idiomático
- 07 - O nil interface e o typed-nil — a armadilha clássica,
(*T)(nil)dentro de uma interface não-nil - 08 - Design idiomático de interfaces — definir no consumidor, interfaces mínimas, quando NÃO criar uma interface
Veja também
- Trilha Go — índice geral (21 galhos + capstone)
- Galho anterior: Tipos, structs e métodos
- Próximo galho: Erros como valor (galho 4) —
error, wrapping,errors.Is/As,panic/recover