长度为零的缓冲通道的使用

时间:2019-01-10 14:34:27

标签: go channels

我想知道为什么语言中存在长度为零的缓冲通道。根据我的经验,他们似乎只是束手无策。根本没有用吗?

2 个答案:

答案 0 :(得分:1)

来自this answer(重点是我):

  

默认情况下,通道的缓冲区大小为0(可通过make(chan int)获得)。这意味着每次发送都会阻塞,直到另一个goroutine从通道接收到为止。

如果您收到死锁,则可能是该通道没有读取任何内容,或者写入速度超出了您的读取速度。

答案 1 :(得分:1)

大小为零的通道未缓冲。这意味着每个发送都将阻塞,直到另一个goroutine从通道接收到为止。此示例将起作用:

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)
}