提交 71c9ed8f 编写于 作者: 写代码的明哥's avatar 写代码的明哥

补充文章

上级 6ee5876b
...@@ -261,13 +261,51 @@ select 里却不是。 ...@@ -261,13 +261,51 @@ select 里却不是。
c1 received: 2 c1 received: 2
c1 received: 4 c1 received: 4
6. 信道关闭也能命中
-------------------
上面的例子基本都是信道有数据可读取、或者信道可写入数据。其实当一个信道被
close 后,select 也能命中。
举个例子
.. code:: go
package main
import "fmt"
func main() {
c1 := make(chan int, 1)
c2 := make(chan int, 1)
close(c1)
for {
select {
case <-c1:
fmt.Println("stop");
return
case <-c2:
fmt.Println("hhh")
}
}
}
执行 ``go run main.go`` 后,会立马输出 stop
::
$ go run main.go
stop
6. 总结一下 6. 总结一下
----------- -----------
select switch select switch
原理很相似,但它的使用场景更特殊,学习了本篇文章,你需要知道如下几点区别: 原理很相似,但它的使用场景更特殊,学习了本篇文章,你需要知道如下几点区别:
1. select 只能用于 channel 的操作(写入/读出),而 switch 则更通用一些; 1. select 只能用于 channel 的操作(写入/读出/关闭),而 switch
则更通用一些;
2. select case 是随机的,而 switch 里的 case 是顺序执行; 2. select case 是随机的,而 switch 里的 case 是顺序执行;
3. select 要注意避免出现死锁,同时也可以自行实现超时机制; 3. select 要注意避免出现死锁,同时也可以自行实现超时机制;
4. select 里没有类似 switch 里的 fallthrough 的用法; 4. select 里没有类似 switch 里的 fallthrough 的用法;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册