Назад к вопросам
Junior — Middle
78
Каким образом можно завершить выполнение программы, когда происходит запрос на остановку её работы в текущем контексте?
Ответ от нейросети
sobes.tech AI
В Go для корректного завершения программы при запросе на остановку обычно используют контекст (context.Context) с отменой. Это позволяет передавать сигнал отмены в горутины и корректно завершать их работу.
Пример:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Отслеживаем системные сигналы для остановки
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("Получен сигнал остановки")
cancel() // отправляем сигнал отмены в контекст
}()
// Запускаем работу, которая слушает контекст
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Завершение работы")
return
default:
fmt.Println("Работаем...")
time.Sleep(1 * time.Second)
}
}
}
Таким образом, при получении сигнала ОС программа корректно завершает все процессы и выходит.