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