Использование буферизованных каналов нулевой длины
Мне интересно, почему в языке существуют буферизованные каналы нулевой длины. Кажется, они просто зашли в тупик в моем опыте. Есть ли какое-либо применение для?
2 ответа
Из этого ответа (выделение мое):
По умолчанию канал имеет размер буфера 0 (вы получаете это с
make(chan int)
). Это означает, что каждая отправка будет блокироваться, пока другая программа не получит данные из канала.
Если вы получаете тупики, то, скорее всего, либо ничего не читает с канала, либо что-то пишет быстрее, чем вы можете прочитать.
Канал нулевого размера не буферизован. Это означает, что каждая отправка будет блокироваться, пока другая программа не получит данные из канала. Этот пример будет работать:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 0)
go func() {
for c := range ch {
fmt.Println(c)
}
}()
ch <- 1
ch <- 2
time.Sleep(time.Minute)
}