Sobes.tech
Middle+

Fala sobre o contexto em Go: para que é usado, como funciona o cancelamento?

sobes.tech IA

Resposta da IA

No Go, o pacote context é utilizado para transmitir sinais de cancelamento, limites de tempo e outros valores entre goroutines, especialmente em operações de rede e de longa duração.

Pontos principais:

  • Para que serve:

    • Cancelar operações (por exemplo, pedidos HTTP, bases de dados) quando o tempo expira ou por sinal.
    • Transmitir limites de tempo (timeouts).
    • Transmitir valores relacionados com a requisição (por exemplo, identificadores, tokens).
  • Como funciona o cancelamento:

    • É criado um contexto com uma função de cancelamento (context.WithCancel), que devolve um novo contexto e uma função de cancelamento.
    • Ao chamar a função de cancelamento, todas as goroutines que escutam esse contexto recebem o sinal e podem interromper o trabalho.

Exemplo:

ctx, cancel := context.WithCancel(context.Background())

// Iniciar uma goroutine que escuta o cancelamento
go func() {
    <-ctx.Done()
    fmt.Println("Operação cancelada")
}()

// Após algum tempo, cancelamos o contexto
cancel()

Assim, context ajuda a gerir o ciclo de vida das operações e a evitar fugas de recursos.