Sobes.tech
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) // մինչև փակումը կարդում է
}