为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁花如伊 2023-02-06 19:36:54
关于频道的Go 教程页面似乎缺少一个词或只是没有被编辑。我不知道关于通过渠道发送和接收应该说些什么。默认情况下,发送和接收阻塞,直到另一方准备就绪。blockGo 中有什么东西吗?我以前没见过。block被用作名词吗?我试着寻找澄清。唯一具有类似措辞的其他页面是educative.io此外,默认情况下,通道发送和接收直到另一方准备好但这没有意义。他们的意思是:通道发送和接收不管对方是否准备好?这不觉得很浪费吗?或者上面的陈述中是否缺少“不要”?
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

“阻塞”意味着 goroutine 将等待。你可以这样写:

默认情况下,发送和接收等到对方准备好。

“块”只是对此的正常术语。它不特定于 Go。可以以非阻塞方式在 Go 中使用通道:

  1. 您可以创建带缓冲区的通道。只要缓冲区中有空间,写入就是非阻塞的(但如果缓冲区已满,它将阻塞)。只要缓冲区中有数据,读取就是非阻塞的(但如果缓冲区为空,它将阻塞)。

  2. 您可以使用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分支,而不是阻塞(等待)。


查看完整回答
反对 回复 2023-02-06
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信