传统的方法在遍历管道时,如果不关闭会阻塞而导致 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
}
}
}
本文介绍了一种在遍历管道时避免死锁的方法,通过使用Go语言中的select语句,可以有效地解决因不关闭管道而可能引发的阻塞问题。文章通过示例代码展示了如何在多个通道间进行选择,当通道为空时如何处理,从而避免了不确定何时关闭管道导致的死锁。
1360

被折叠的 条评论
为什么被折叠?



