我想知道为什么语言中存在长度为零的缓冲通道。根据我的经验,他们似乎只是束手无策。根本没有用吗?
答案 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)
}