Middle+
Ով պետք է փակել ալիքը - գրողը թե ընթերցողը?
sobes.tech AI
Պատասխան AI-ից
Go-ում, ալիքը պետք է փակել ուղարկողը (sender), ոչ թե ստացողը (receiver): Ալիքի փակումը նշում է, որ այլ արժեքներ չի ուղարկվի, և ընթերցողները կարող են ճիշտ ավարտել ընթերցումը՝ հայտնաբերելով, որ ալիքը փակ է:
Եթե ընթերցողը փակել է ալիքը և ուղարկողը շարունակի փորձել ուղարկել, դա կհանգեցնի panic-ի: Այդ պատճառով, ալիքի փակման պատասխանատվությունը կրում է այն կողմը, որը գրում է այն:
Օրինակ՝
ch := make(chan int)
func() {
defer close(ch) // ուղարկողը փակել է ալիքը
for i := 0; i < 5; i++ {
ch <- i
}
}()
for val := range ch {
fmt.Println(val) // մինչև փակումը կարդում է
}