range和close
发送者可以通过close
来关闭channel。
接受者可以通过传入第二个参数来测试channl是否被关闭
|
|
循环for i := range c
会不断从channl接受值,直到它被关闭。
只有发送者能关闭channel,而不是接收者
|
|
输出结果
|
|
select
select
使得一个goroutine在多个通讯操作中等待。
select
会阻塞,直到条件分支中的某个可以继续执行,这时就会执行那个分支。当多个都准备好时,会随机选择一个。
|
|
输出结果12345678910110112358132134quit
默认选择
当select
中的其他分支都没有准备好的时候,default
分支会被执行。
为了非阻塞的发送或者接口,可以使用default分支。
|
|
sync.Mutex
如果只想保证每个时刻,只有一个goroutine能访问一个共享的变量避免冲突怎么办?
这里涉及的概念叫做互斥,使用互斥锁mutex
来提供这个限制。
Go标准库中提供了sync.Mutex
类型以及两个方法
- Lock
- Unlock
|
|
输出结果11000