Junior — Middle
Кандайча ишке ашырылып жаткан goroutine'ду туура токтотсо болот, эгер ал сырттан келген сигнал же шартка жараша аяктаса, бирок натыйжа дагы алынган эмес болсо?
sobes.tech AI
AIден жооп
Go тилинде иштеп жаткан goroutine'ни тышкы сигнал же шарт боюнча туура токтотуу үчүн көбүнчө контекст (context.Context) же каналдар колдонулат сигналды берүү үчүн.
Контекстти колдонуу менен мисал:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Токтотуу сигналы алынды, goroutine аяктайт
return
default:
// Жумушту аткаруу
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Бир убакта, cancel() чакырып, goroutine'ни токтотобуз
cancel()
}
Бул ыкма goroutine'ге үзгүлтүксүз текшерип турушу жана туура аяктоо мүмкүнчүлүгүн берет, натыйжа дагы алына элек болсо да. Ошондой эле, токтотуу сигналын берүү үчүн канал колдонсо болот, бирок context Go тилинде эң идиоматтык жана ыңгайлуу жол болуп саналат.