Sobes.tech
Junior — Middle

Cik reizes ir nepieciešams slēgt kanālu Go, lai izvairītos no kļūdām?

sobes.tech AI

Atbilde no AI

Go valodā ir nepieciešams slēgt kanālu tieši vienu reizi, kad vairs nav plānots sūtīt tajā datus. Kanāla vairākas reizes slēgšana izraisīs paniku (runtime panic).

Svarīgi:

  • To, kurš raksta kanālā, tam jāaizver, nevis tam, kurš lasa.
  • Ja kanāls tiek izmantots datu pārraidīšanai starp gorutīnām, slēgšana signalizē, ka datu vairs nebūs.

Piemērs:

ch := make(chan int)
func() {
    defer close(ch) // slēdzam kanālu vienu reizi
    for i := 0; i < 5; i++ {
        ch <- i
    }
}()

for val := range ch {
    fmt.Println(val)
}

Šajā piemērā kanāls tiek slēgts vienu reizi pēc visu vērtību nosūtīšanas.