[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

# Ponteiros e endereços em Go

Como Go representa endereços com \*T e &, quando métodos usam receiver ponteiro e como isso afeta valores e interfaces.

Revisado em 2026-11-15

## Endereço e tipo ponteiro

Para um valor x do tipo T, &x obtém seu endereço e produz um valor do tipo \*T. O asterisco faz parte da escrita do tipo: \*Account significa ponteiro para Account. Ao escrever \*p em uma expressão, acessamos o valor apontado.

Um ponteiro permite que funções e métodos acessem o mesmo valor sem copiar a struct inteira. Ele também pode ser nil; dereferenciar um ponteiro nil causa panic.

```
account := Account{ID: "a", Balance: 5000}
address := &account // *Account
address.Balance -= 100
```

## Receivers ponteiro

Em func (a \*Account) Withdraw(...), a é o receiver e \*Account é seu tipo. O método pode alterar Balance no valor apontado. Go permite chamar esse método com uma variável addressable account, escrevendo account.Withdraw(...); o compilador ajusta a chamada para usar &account quando isso é permitido.

O conjunto de métodos de \*Account inclui métodos com receiver Account e \*Account; o conjunto de Account inclui apenas métodos com receiver Account. Se uma interface exige um método com receiver ponteiro, normalmente é \*Account que a satisfaz.

```
func (a *Account) Withdraw(amount int64) {
    a.Balance -= amount
}
```

## Ponteiro para um literal composto

A expressão &TransferService{accounts: accounts} cria um literal composto e obtém um ponteiro para o valor inicializado. O resultado tem tipo \*TransferService. NewTransferService é uma convenção de nome, sem tratamento especial do compilador.

Go mantém o valor válido enquanto houver referências a ele. Não precisamos escolher manualmente stack ou heap para escrever essa função.

```
return &TransferService{accounts: accounts}
```

## Fontes primárias

-   [Go Language Specification — Pointer types](https://go.dev/ref/spec#Pointer_types)
-   [Go Language Specification — Address operators](https://go.dev/ref/spec#Address_operators)
-   [Go Language Specification — Method sets](https://go.dev/ref/spec#Method_sets)
-   [A Tour of Go — Pointers](https://go.dev/tour/moretypes/1)

## Relacionado

-   [Etapa do caso de uso](/learning/aprendendo-hexagonal-em-go#etapa-caso-de-uso)
-   [Literais compostos](/reference/go/composite-literals)

![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)
