Sobes.tech
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 эч качан чексиз күтпөйт жана туура аяктоо мүмкүнчүлүгүнө ээ болот.