-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
基本概念
有2种类型的channel
- 有缓存的channel,其定义为:
make(chan int, 100)make(chan struct{}, 10)
- 无缓存的channel,其定义为:
make(chan int)make(chan int, 0)
对channel的操作
-
向channel发送数据
ch1 <- 1ch2 <- struct{}{}
-
从channel获取数据
-
v, ok := <-ch12个接收者。
第一个获得接收的数据,第二个表示当前数值是否合法。
若channel已被关闭,则第一个获取的值永远是0、false、nil等值,同时第二个值为false。 -
v := <-ch21个接收者。
获得的数据,如果channel已经关闭,会一直从channel中获取到0值(或false、nil等)
-
-
关闭channel
-
close ch1关闭channel后,若有接收者,则一直会获取0值。
-
分析大纲
源码版本:
root@zy-dev:/usr/local/go/src/runtime# go version
go version go1.5.4 linux/amd64分析channel底层实现时,也按照上层的操作逐一拆解,划分为:
- 有缓存的channel
- 无缓存的channel
分别分析对应的操作:
- 创建
- 发送
- 接收
- 关闭