channel使用惯例

通道具有以下性质:

  • nil通道发送数据会永久阻塞

  • nil通道接收数据会永久阻塞

  • 向已关闭的通道发送会引发恐慌

  • 从已关闭的通道接收会立刻返回零值

向nil通道发送数据会永久阻塞

package main

func main() {
        var ch chan bool
        ch <- true // deadlocks because ch is nil
}

---------Output-----------
fatal error: all goroutines are asleep - deadlock!

通道没有初始化值则为nil,所以上述程序会永久阻塞(发生死锁)。

上述代码并无利用价值,它属于缺陷(Bug)。请不要这样做

从nil通道接收数据会永久阻塞

类似的,这也会引发死锁,是Bug,请不要这样做

向已关闭通道发送会引发恐慌

最后更新于

这有帮助吗?