传统的方法在遍历管道时,如果不关闭会阻塞而导致 deadlock ,在实际开发中我们不好确定在什么时候关闭管道。可以使用 select 方式解决。
/**
* @Author: v_bivwei
* @Description:
* @Date: 2020/1/22 18:03
*/
package main
import (
"fmt"
)
func main() {
var intChan = make(chan int, 10)
for i := 0; i < 10; i++ {
intChan <- i
}
var stringChin = make(chan string, 5)
for i := 0; i < 5; i++ {
stringChin <- fmt.Sprintf("stringChin %d", i)
}
for {
select {
case v := <-intChan:
fmt.Printf("intChin 读出来的数据为 %d\n", v)
case v := <-stringChin:
fmt.Printf("intChin 读出来的数据为 %s\n", v)
default:
// 取完了的逻辑
// ...
return
}
}
}