当从一个已关闭且有缓存的 channel 读取数据时,读操作将会继续进行直到缓存中的所有数据都被读取完毕。读取操作不会被阻塞,即使通道已经关闭。\n\n如果缓存中没有数据可用,读取操作将立即返回默认值(零值)并且会返回一个 bool 类型的值来指示通道是否已经关闭。这可以通过在读取操作中使用第二个返回值来判断。\n\n以下是一个示例代码:\n\ngo\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n ch := make(chan int, 2)\n ch <- 1\n ch <- 2\n close(ch)\n\n for {\n if val, ok := <-ch; ok {\n fmt.Println(val)\n } else {\n break\n }\n }\n}\n\n\n在这个例子中,我们创建了一个有缓存大小为 2 的整数通道,并向通道中写入了两个值。然后,我们关闭通道并从中读取数据。\n\n输出结果将会是:\n\n\n1\n2\n\n\n在循环中,我们使用 ok 变量来判断通道是否已经关闭。如果通道已经关闭,ok 将会是 false,循环将会终止。否则,我们将会打印出从通道中读取的值。

Golang 从关闭的有缓存 Channel 读取数据行为解析

原文地址: https://www.cveoy.top/t/topic/pWY2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录