Sobes.tech
Middle — Middle+

Como é que se pode controlar a execução do programa e gerir o seu estado durante a sua execução?

sobes.tech IA

Resposta da IA

Em Go, para controlar a execução do programa e gerir o seu estado durante a operação, costuma-se usar:

  • Goroutines — threads leves que permitem executar funções em paralelo.
  • Canais — para sincronização e troca de dados entre goroutines.
  • Contexto (context.Context) — para gerir o tempo de vida das operações, cancelamentos e transmissão de limites de tempo.
  • Pacote sync — para gerir o acesso concorrente a recursos (Mutex, WaitGroup, etc.).

Exemplo de uso do contexto para cancelar uma operação:

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

go func() {
    // após 2 segundos, cancelamos o contexto
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-time.After(5 * time.Second):
    fmt.Println("Operação concluída")
case <-ctx.Done():
    fmt.Println("Operação cancelada")
}

Assim, o controlo do estado do programa é alcançado através da coordenação de goroutines, uso do contexto para cancelamentos e sincronização, bem como através de mecanismos de bloqueio e sinais.