关于频道的Go 教程页面似乎缺少一个词或只是没有被编辑。我不知道关于通过渠道发送和接收应该说些什么。默认情况下,发送和接收阻塞,直到另一方准备就绪。blockGo 中有什么东西吗?我以前没见过。block被用作名词吗?我试着寻找澄清。唯一具有类似措辞的其他页面是educative.io此外,默认情况下,通道发送和接收直到另一方准备好但这没有意义。他们的意思是:通道发送和接收不管对方是否准备好?这不觉得很浪费吗?或者上面的陈述中是否缺少“不要”?
1 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
“阻塞”意味着 goroutine 将等待。你可以这样写:
默认情况下,发送和接收等到对方准备好。
“块”只是对此的正常术语。它不特定于 Go。可以以非阻塞方式在 Go 中使用通道:
您可以创建带缓冲区的通道。只要缓冲区中有空间,写入就是非阻塞的(但如果缓冲区已满,它将阻塞)。只要缓冲区中有数据,读取就是非阻塞的(但如果缓冲区为空,它将阻塞)。
您可以使用
select
带有default
分支的语句。
var readch chan int
var writech chan int
var value int
select {
case n := <- readch:
// Received data.
case writech <- value:
// Sent data.
default:
// Didn't send or receive data.
}
在这段代码中,goroutine 将转到default分支,而不是阻塞(等待)。
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消