首页 > 试题广场 >

下面关于 Go 语言中的协程和通道(channels)的说法

[不定项选择题]
下面关于 Go 语言中的协程和通道(channels)的说法错误的有()
  • 无缓冲通道在发送和接收都完成之前不会释放 goroutine
  •  通道可以在多个 goroutine 之间安全地传递数据
  • 关闭通道后,再向该通道发送数据会阻塞程序
  • 通道关闭后,所有通道中未被读取的数据将会丢弃
疑问:select 语句允许一个 goroutine 等待多个通信操作。配合 default 子句,可以实现非阻塞操作。为什么A对

gemini回答:

A 选项描述的是 ch <- 1 这个操作的本质:如果单独执行 ch <- 1,它一定会阻塞当前的 goroutine,直到有接收者出现。
select 是一个控制流结构:它像一个调度器,它会检查它所有的 case。如果某个 case 上的通道操作可以立即完成(不会阻塞),它就执行那个 case。
default 的作用:如果 select 检查了所有的 case,发现每一个都会导致阻塞,那么它就会选择执行 default 分支。
结论:select + default 并没有改变通道操作“会阻塞”的性质。相反,它是在预知到操作会阻塞的情况下,为 goroutine 提供了“另一条出路”(即 default 分支),从而避免了让 goroutine 进入实际的阻塞状态。
编辑于 2025-09-19 15:25:22 回复(0)