Sobes.tech
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)
}

Бұл мысалда, канал барлық мәндер жіберілгеннен кейін бір рет жабылады.