Junior — Middle
Чӣ қадар вақт бояд канал дар Go баста шавад, то хатогиро пешгирӣ кунад?
sobes.tech AI
Ҷавоб аз AI
В Go, каналды дәл бір рет жабу керек, егер оған енді деректер жіберілмейтін болса. Каналды бірнеше рет жабу паникаға (runtime panic) әкеледі.
Маңызды:
- Каналға жазатын адам оны жабуы керек, оқитын адам емес.
- Егер канал горутиндер арасында деректерді тасымалдау үшін қолданылса, жабу ол енді деректер болмайтынын көрсетеді.
Мысал:
ch := make(chan int)
func() {
defer close(ch) // каналды бір рет жабамыз
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val)
}
Бұл мысалда, канал барлық мәндер жіберілгеннен кейін бір рет жабылады.