Golang: Language: Concurrency: Close Channel

10th December 2021 at 6:14pm

关闭一个 channel 的方式:

close(ch)

如果向一个已经关闭的 channel 发送数据,会导致 panic。这意味着,只有发送数据的一方应该控制 channel 的关闭(接收的一方不应该关闭 channel,因为并不知道对方还要不要发送)。

没有不消费 channel 便知道它是否被关闭的方式。

对于一个关闭的 channel:

v := <- ch     // v 为 nil
v, ok := <-ch  // v 为 nil,ok 为 false

for v := range ch {
    fmt.Println(v)  // 这行永远不会被执行
}