Junior — Middle
Kako odrediti da su svi kanali zatvoreni iz metode Main?
sobes.tech АИ
Одговор од АИ
U Go jeziku, određivanje da su svi kanali zatvoreni iz main metode može se uraditi na više načina, u zavisnosti od konteksta:
-
Koristite kanal za signalizaciju završetka — na primer, zatvaranjem posebnog kanala kada sve radne gorutine završe.
-
Proverite zatvaranje kanala pri čitanju — pri čitanju iz kanala, operator
v, ok := <-chvraćaok == falseako je kanal zatvoren i svi podaci pročitani. -
Koristite
sync.WaitGroupza čekanje završetka svih gorutina koje pišu u kanal, a zatim zatvaranje kanala umainnakon njihovog završetka.
Primer sa WaitGroup:
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
// rad sa kanalom
ch <- 1
}()
// U posebnoj gorutini zatvaramo kanal nakon što svi pošiljaoci završe
go func() {
wg.Wait()
close(ch)
}()
for v := range ch {
fmt.Println(v) // petlja će se završiti kada se kanal zatvori
}
Na ovaj način, u main-u se može odrediti da je kanal zatvoren kada petlja preko njega završi, što znači da su svi podaci poslati i kanal zatvoren.