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

for{
	//  尝试从ch1接收值
	data := <-ch1
	//  尝试从ch2接收值
	data := <-ch2
}

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

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