Junior — Middle
Учурдагы контекстте анын ишин токтотуу өтүнүчү келип түшкөндө, программаны кантип аяктоо керек?
sobes.tech AI
AIден жооп
Go тилинде, токтоону сурап жатканда программа туура бүтүшү үчүн, адатта, жокко чыгаруу менен контекст (context.Context) колдонулат. Бул goroutine'ларга жокко чыгаруу белгилерин жиберүүгө жана алардын туура бүтүшүнө мүмкүндүк берет.
Мисал:
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)
}
}
}
Ошентип, системалык сигнал алынганда, программа бардык процесстерди туура аяктап чыгат.