Использование буферизованных каналов нулевой длины - PullRequest
0 голосов
/ 10 января 2019

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

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Канал нулевого размера небуферизован. Это означает, что каждая отправка будет блокироваться до тех пор, пока другая программа не получит от канала. Этот пример будет работать:

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)
}
0 голосов
/ 10 января 2019

С этот ответ (выделение мое):

По умолчанию канал имеет размер буфера 0 (вы получаете это с make(chan int)). Это означает, что каждая отдельная отправка будет блокироваться, пока другая программа не получит от канала .

Если вы получаете тупики, то, скорее всего, либо ничего не читает с канала, либо что-то пишет быстрее, чем вы можете прочитать.

...