Junior — Middle
Hozirgi kontekstda uning ishini to'xtatish so'rovi bo'lsa, dasturni qanday yakunlash mumkin?
sobes.tech AI
AIdan javob
Go tilida, to‘xtash so‘rovi bo‘yicha dastur to‘g‘ri yakunlanishi uchun odatda bekor qilish bilan kontekst (context.Context) ishlatiladi. Bu goroutinlarga bekor qilish signalini yuborish va ularni to‘g‘ri yakunlash imkonini beradi.
Misol:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
// Tizim signallarini kuzatish va to‘xtatish
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-sigs
fmt.Println("To‘xtash signali olindi")
cancel() // kontekstga bekor qilish signalini yuborish
}()
// Kontekstni tinglaydigan ishni boshlash
work(ctx)
}
func work(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Ishni yakunlash")
return
default:
fmt.Println("Ishlamoqda...")
time.Sleep(1 * time.Second)
}
}
}
Shu tarzda, operatsion tizim signali olinsa, dastur barcha jarayonlarni to‘g‘ri yakunlaydi va chiqadi.