在 Go 中,如果 channel channel
已关闭,我仍然可以使用以下语法从中读取,并且可以测试 ok
以查看它是否已关闭。
value, ok := <- channel
if !ok {
// channel was closed and drained
}
但是,如果我不知道某个 channel 是否已关闭而盲目地写入它,我可能会收到错误消息。我想知道是否有任何方法可以测试 channel 并仅在 channel 未关闭时写入。我问这个问题是因为有时我不知道一个通道是否在 goroutine 中关闭。
最佳答案
你不能。这里的经验法则是只有作家才应该关闭 channel ,这样你就知道你不应该再向那个 channel 写信了。
一些简单的代码如下所示:
for i := 0; i < 100; i++ {
value := calculateSomeValue()
channel <- value
}
close(channel) //indicate that we will no more send values
关于go - 如何测试 channel 是否关闭并且仅在未关闭时发送给它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39213230/