select多路复用

2023-09-14 08:11:53 浏览数 (2)

当需要从多个管道中读取数据时,如果没有数据,可能会产生阻塞

代码语言:javascript复制
for{
    //  尝试从ch1接收值
    data := <-ch1
    //  尝试从ch2接收值
    data := <-ch2
}

go语言内置了select关键字,可以同时响应多个管道的操作,当某个case完成后自动退出select,当所有case执行失败后执行select语句。

代码语言:javascript复制
select {
    case <-chan1:
   //  如果chan1成功读到数据,则进行该case处理语句
    case chan2 <- 1:
   //  如果成功向chan2写入数据,则进行该case处理语句
    default:
   //  如果上面都没有成功,则进入default处理流程
}

0 人点赞