Sobes.tech
Junior — Middle

Goда goroutineдин абалы жана аяктоо кандай башкарылат?

sobes.tech AI

AIден жооп

Goда, күйдү башкаруу жана goroutine'лердин аякталышы адатта каналдар (channels) жана контексттер (context) аркылуу ишке ашырылат.

  1. Каналдар goroutine'лер ортосунда сигналдар өткөрүүгө мүмкүндүк берет. Мисалы, аяктоо зарылдыгын билдирүү үчүн канал түзсө болот:
stop := make(chan struct{})
func() {
    for {
        select {
        case <-stop:
            return // Goroutine'ни аяктоо
        default:
            // Жумушту аткаруу
        }
    }
}()

// Goroutine'ни токтотуу үчүн:
close(stop)
  1. Контекст пакети goroutine'лердин жашоо мөөнөтүн башкаруунун ыңгайлуу жолун камсыздайт, өзгөчө суроолор же узак мөөнөттүү операциялар менен иштегенде:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            return // Goroutine'ни аяктоо
        default:
            // Жумуш
        }
    }
}(ctx)

// Токтотуу үчүн:
cancel()

Мындайча айтканда, goroutine'лер каналдар же контексттер аркылуу сигналдарды угуп, сигнал келгенде туура аяктайт.