【发布时间】:2017-01-05 21:31:21
【问题描述】:
在 Go 中,如果通道 channel 已关闭,我仍然可以使用以下语法从中读取,并且可以测试 ok 以查看它是否已关闭。
value, ok := <- channel
if !ok {
// channel was closed and drained
}
但是,如果我不知道某个通道是否已关闭而盲目地写入它,我可能会收到错误消息。我想知道是否有任何方法可以测试通道并仅在通道未关闭时写入。我问这个问题是因为有时我不知道一个通道是否在 goroutine 中关闭。
【问题讨论】:
-
如果你不知道一个通道是否关闭而盲目地写入它,那么你的程序设计得很糟糕。重新设计,这样关闭后就无法写入了。
-
是的@ain,我完全同意你的看法!我只是想知道,从技术上讲,是否有办法做到这一点。