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)
}