Junior — Middle
Como pode um programa terminar a sua execução quando recebe um pedido para parar no contexto atual?
sobes.tech IA
Resposta da IA
Em Go, para terminar corretamente um programa ao solicitar uma paragem, geralmente usa-se um contexto (context.Context) com cancelamento. Isto permite enviar um sinal de cancelamento às goroutines e terminá-las corretamente.
Exemplo:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Acompanhar sinais do sistema para parar
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Sinal de paragem recebido")
cancel() // enviar sinal de cancelamento ao contexto
}()
// Executar o trabalho que escuta o contexto
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("A terminar o trabalho")
return
default:
fmt.Println("A trabalhar...")
time.Sleep(1 * time.Second)
}
}
}
Desta forma, ao receber o sinal do sistema operativo, o programa termina corretamente todos os processos e sai.