package main
import "fmt"
func main() {
//使用select解决管道取数据导致的阻塞问题
//1.定义一个管道 10个数据int
intChan := make(chan int, 10)
for i := 0; i < 10; i++ {
intChan <- i
}
//2.定义一个管道,5个数据string
stringChan := make(chan string, 5)
for i := 0; i < 5; i++ {
stringChan <- "hello" + fmt.Sprintf("%d", i)
}
//传统的方法在遍历管道的时候,如果不关闭会阻塞导致deadlock
//用select解决
for {
select {
case v := <-intChan: //注意,如果intChan一直没有关闭,不会一直阻塞导致deadlock
fmt.Printf("从intChan读取的数据%d\n", v)
case v := <-stringChan:
fmt.Printf("从stringChan读取的数据%s\n", v)
default:
fmt.Printf("都取不到了,不玩了,程序员可以加入逻辑\n")
return
}
}
}
golang-select解决管道数据阻塞问题
最新推荐文章于 2024-05-02 10:47:30 发布