Использование буферизованных каналов нулевой длины

Мне интересно, почему в языке существуют буферизованные каналы нулевой длины. Кажется, они просто зашли в тупик в моем опыте. Есть ли какое-либо применение для?

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)
}
Другие вопросы по тегам