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.