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.

Fontes primárias