Rafael

Engenheiro de Software

Olá, Eu sou Rafael. Estou construindo coisas para a web e mobile.

Um desenvolvedor dedicado a criar experiências digitais de alto desempenho, acessíveis e limpas. Eu me especializo em transformar problemas complexos em soluções de engenharia elegantes.

Context em Golang

O pacote context em Go serve para gerenciar o ciclo de vida, cancelamento e transporte de valores entre goroutines e requisições HTTP. Ele é fundamental em ambientes concorrentes para evitar vazamentos de memória (goroutines presas) e controlar timeouts ou prazos limites (deadlines) em operações de rede ou banco de dados.

Principais usos do Context:

1. WithTimeout: Cancela após um tempo limite

2. WithDeadline: Cancela em data/hora específica

3. WithCancel: Cancela manualmente via cancel()

4. WithValue: Passa valores entre funções (use com moderação)

Vamos criar um server e client como exemplos de um HTTP com WithTimeout. Que nada mais é que um temporizador para cancelar a tarefa, no nosso caso a request. Note que nosso server tem um tempo de 5 segundos para o client fazer a requisição. Neste exemplos usamos o select{} que fica aguardando resultado de uma forma assíncrona e quando vem determinado resultado ele toma a ação.

Vamos ao server:

No nosso client temos um tempo 6 segundos:

Depois que você rodar o server no go run e o client a saída no log do terminal server vai ser essa embaixo, por que o server tá com um tempo de 5 segundos e o client tá com 6 segundos:

2026/02/17 23:16:08 Request inicializada
2026/02/17 23:16:13 Request processada com sucesso
2026/02/17 23:16:13 Request terminada

Caso você interrompa antes do client executar (signal: interrupt) a saída no log do terminal server vai ser:

2026/02/17 23:36:35 Request inicializada
2026/02/17 23:36:36 Request cancelada pelo cliente
2026/02/17 23:36:36 Request terminada

Vamos outro exemplo de WithTimeout mas, agora com uma consulta no banco de dados que deve retornar o valor em um tempo de 5 segundos:

Vamos ver um exemplo agora com o WithDeadline:

Agora vamos ver um exemplo de WithCancel que
é o cancelamento quando não fazer mais sentido ter aquela tarefa. Neste
exemplo temos uma goroutine que fica imprimindo Processando.. até o
context ser cancelado:

E por último o WithValue que passa valores entre contexto para outra camada de nossa aplicação:

0 comentários

Deixe seu comentário