Sobes.tech
Middle+

Ով պետք է փակել ալիքը?

sobes.tech AI

Պատասխան AI-ից

Կանալի ստեղծողը պետք է այն փակել և այլևս տվյալներ չուղարկի դրան: Սա կարևոր է, որպեսզի խուսափենք պանիկայից, երբ փորձում ենք տվյալներ ուղարկել փակված կանիալին, և որպեսզի ստացողները կարողանան ճիշտ որոշել տվյալների հոսքի վերջը:

Հիմնական կանոններ՝

  • Ուղարկողը փակել է կանիալը, երբ այլևս արժեքներ չի ուղարկի:
  • Ստացողները չպետք է փակեն կանիալը:
  • Կանիալի փակումը նշան է ստացողներին, որ նոր տվյալներ չեն գալու:

Օրինակ՝

func արտադրող(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch) // Բոլոր տվյալները ուղարկելուց հետո փակել ենք կանիալը
}

func սպառող(ch <-chan int) {
    for val := range ch {
        fmt.Println(val)
    }
    // Երբ կանիալը փակ է, ցիկլը ավարտվում է
}

func main() {
    ch := make(chan int)
    go արտադրող(ch)
    սպառող(ch)
}