Junior — Middle
Как може да бъде завършено изпълнението на програма, когато получи заявка за спиране в текущия контекст?
sobes.tech AI
Отговор от 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)
}
}
}
По този начин, при получаване на сигнал от операционната система, програмата правилно завършва всички процеси и излиза.