Sobes.tech
Senior

O que sabes sobre trabalhar com contextos em Go? Quais métodos existem para ele?

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 assíncronas.

Principais métodos e funções:

  • context.Background() — devolve um contexto vazio, geralmente usado como raiz.
  • context.TODO() — marcador de posição quando o contexto ainda não está definido.
  • WithCancel(parent Context) — devolve um novo contexto e uma função de cancelamento, permitindo cancelar operações.
  • WithDeadline(parent Context, deadline time.Time) — cria um contexto com um limite de tempo.
  • WithTimeout(parent Context, timeout time.Duration) — cria um contexto com um tempo limite.
  • WithValue(parent Context, key, val interface{}) — cria um contexto com um valor associado.

Exemplo de uso:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case <-time.After(3 * time.Second):
    fmt.Println("operação finalizada")
case <-ctx.Done():
    fmt.Println("operação cancelada ou expirou")
}

O contexto ajuda a controlar o tempo de vida das operações e a transmitir parâmetros sem variáveis globais.