猿问

从一些遗漏的单词或单词中澄清 Go 频道教程

关于频道的Go 教程页面似乎缺少一个词或只是没有被编辑。我不知道关于通过渠道发送和接收应该说些什么。

默认情况下,发送和接收阻塞,直到另一方准备就绪。

blockGo 中有什么东西吗?我以前没见过。block被用作名词吗?

我试着寻找澄清。唯一具有类似措辞的其他页面是educative.io

此外,默认情况下,通道发送和接收直到另一方准备好

但这没有意义。他们的意思是:

  • 通道发送和接收不管对方是否准备好?这不觉得很浪费吗?

  • 或者上面的陈述中是否缺少“不要”?


繁花如伊
浏览 94回答 1
1回答

慕无忌1623718

“阻塞”意味着 goroutine 将等待。你可以这样写:默认情况下,发送和接收等到对方准备好。“块”只是对此的正常术语。它不特定于 Go。可以以非阻塞方式在 Go 中使用通道:您可以创建带缓冲区的通道。只要缓冲区中有空间,写入就是非阻塞的(但如果缓冲区已满,它将阻塞)。只要缓冲区中有数据,读取就是非阻塞的(但如果缓冲区为空,它将阻塞)。您可以使用select带有default分支的语句。var readch chan intvar writech chan intvar value intselect {case n := <- readch:&nbsp; &nbsp; // Received data.case writech <- value:&nbsp; &nbsp; // Sent data.default:&nbsp; &nbsp; // Didn't send or receive data.}在这段代码中,goroutine 将转到default分支,而不是阻塞(等待)。
随时随地看视频慕课网APP

相关分类

Go
我要回答