Junior — Middle
Күтүлгөн мааниге жетпей жатканда, goroutine ишин кантип токтотсо болот?
sobes.tech AI
AIден жооп
Go тилинде, күтүп жаткан, бирок бул мааниси келбеши мүмкүн болгон goroutine'ни токтотуу үчүн, адатта, тайм-ауту бар каналдар же жокко чыгаруу контексттери колдонулат.
Тайм-ауту бар select жана time.After менен мисал:
select {
case val := <-ch:
// мааниси алынды, ишин улантабыз
case <-time.After(time.Second * 5):
// тайм-аут, goroutine'ни токтотуу
}
Башка жол — сырттан жокко чыгаруу мүмкүнчүлүгү бар контекстти (context.Context) колдонуу:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// val'ди иштетүү
case <-ctx.Done():
// goroutine'ни токтотуу
}
}()
// кээ бир учурда cancel() чакырып, goroutine'ни токтотосуз
Мындайча айтканда, goroutine эч качан чексиз күтпөйт жана туура аяктоо мүмкүнчүлүгүнө ээ болот.