Pacote Context do Go

A maioria dos desenvolvedores Go utiliza context.Context sem entendê-lo. Você o vê em handlers HTTP, chamadas de banco de dados e métodos de SDK. Muitos iniciantes passam context.Background() em todos os lugares.

Esse erro causa problemas. Uma função Lambda pode ficar travada além do seu timeout. Uma consulta ao banco de dados pode continuar rodando após um usuário se desconectar.

O Context permite enviar sinais de cancelamento e prazos (deadlines) através do seu código. Ele ajuda você a responder a três perguntas:

• Esta operação deve continuar rodando? • Quando esta operação deve terminar? • Quais dados da requisição fluem com esta chamada?

A interface Context possui quatro métodos:

O Context funciona como uma árvore. Você começa com um contexto pai e cria filhos.

Contextos Raiz:

Contextos Filhos:

Regra Crucial: Sempre chame a função de cancelamento. Use defer cancel() imediatamente após criar um contexto filho. Se você pular isso, criará vazamentos de memória (memory leaks).

Melhores Práticas:

Quando um contexto pai é cancelado, todos os seus filhos são cancelados automaticamente. Isso torna fácil interromper uma cadeia inteira de operações em todo o seu sistema.

Fonte: https://dev.to/ferztyle/go-context-package-37nk