[Pular para o conteúdo principal](#main-content)

[![Logo Bendev](/images/logo-branco.png)](/)

-   [Trabalhos](/projetos)
-   [Sobre](/sobre)
-   [Escrita](/blog)
-   [Aprendizado](/learning)
-   [Referência](/reference)
-   [Imprensa](/entrevistas)
-   [Contato](/contato)

PTENES

[Referência](/reference) / Go

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

-   [Go Language Specification — Interface types](https://go.dev/ref/spec#Interface_types)
-   [Effective Go — Interfaces](https://go.dev/doc/effective_go#interfaces)

## Relacionado

-   [Arquitetura hexagonal em Go: etapa de portas](/learning/aprendendo-hexagonal-em-go#etapa-portas)
-   [Métodos e tipos em Go](/reference/go/methods-and-types)

![Logo Bendev](/images/logo-branco.png)

© 2026 Bendev Junior. Todos os direitos reservados.

### Links Rápidos

-   [Trabalhos](/projetos)
-   [Sobre](/sobre)
-   [Escrita](/blog)
    -   [Livros](/livros)
-   [Imprensa](/entrevistas)
-   [Contato](/contato)

### Redes Sociais

[LinkedIn de Bendev Junior](https://linkedin.com/in/bendevjunior)[GitHub de Bendev Junior](https://github.com/bendevjunior)[Instagram de Bendev Junior](https://instagram.com/bendevoficial)
