Documentação de Go
Interfaces em Go
Como interfaces descrevem comportamento por métodos, como tipos as implementam implicitamente e como esse mecanismo forma portas de dependência.
Revisado em 2026-11-15
O que é uma interface
Uma interface básica especifica um conjunto de métodos. Um tipo implementa essa interface quando seu conjunto de métodos inclui os métodos exigidos, com assinaturas compatíveis. A declaração do tipo não precisa mencionar a interface.
Isso permite que o pacote que usa um comportamento declare um contrato pequeno, enquanto diferentes tipos podem satisfazê-lo sem depender uns dos outros.
type AccountRepository interface {
Get(id string) (*Account, error)
Save(accounts ...*Account) error
}Implementação implícita
Um adaptador que define os métodos exigidos satisfaz a interface automaticamente. Não existe uma declaração implements para adicionar.
Na arquitetura hexagonal, isso deixa o núcleo depender de uma porta comportamental. Um adaptador de memória, SQL ou outro armazenamento pode atender à mesma porta.
type MemoryAccounts struct { /* armazenamento */ }
func (m *MemoryAccounts) Get(id string) (*Account, error) { /* ... */ }
func (m *MemoryAccounts) Save(accounts ...*Account) error { /* ... */ }Onde declarar a interface
Declare uma interface junto ao código que a consome e mantenha-a tão pequena quanto o comportamento necessário. Essa é uma recomendação de projeto, não uma regra exigida pelo compilador.
A documentação Effective Go mostra interfaces pequenas como io.Writer. A especificação define formalmente os conjuntos de métodos e a implementação.