Go Channels Cheatsheet

channel类型

是否buffered:

方向:

发送到channel

从channel接收

关于从已关闭的channle接收的另一种形式:

x, ok := <-ch

如果ok为true:取出的值是channel被关闭之前发送的

如果ok为false:channel已经被关闭了而且空了

所以,从接收方来说你无法知道channel何时被关闭,因为关闭之后你还可以从buffer(如果有的话)中取值。

关闭channel

close(ch)

select channel

在一组发送和接收case中,选择一个不会阻塞case:

select {
  case v, ok := <- ch:
    // 从channel接收
  case ch <- 1:
    // 发送到channel
  default:
    // 上面两个case都会阻塞时
}

规则:

for range channel

从一个channel中接收:

for v := range ch {
}

规则:

参考资料