看不懂golang select
时间: 2023-09-01 09:11:24 浏览: 116
理解golang中关键字-chan&select
`select` 是 Go 语言中的一种控制结构,用于在多个通道上等待操作,一旦其中一个通道准备好了,就执行对应的操作。它的语法如下:
```
select {
case <- channel1:
// 执行 channel1 的操作
case data := <- channel2:
// 执行 channel2 的操作
case channel3 <- newData:
// 执行 channel3 的操作
default:
// 如果没有任何一个通道准备好,则执行 default 语句
}
```
`select` 会等待所有的通道都准备好,然后从中选择一个执行对应的操作。如果有多个通道都准备好了,那么会随机选择一个通道来执行。其中,`case <- channel1` 表示从 `channel1` 中读取数据;`case data := <- channel2` 表示从 `channel2` 中读取数据并将其赋值给 `data` 变量;`case channel3 <- newData` 表示向 `channel3` 中写入数据。
`select` 还可以与 `for` 循环结合使用,实现循环等待多个通道的操作。例如:
```
for {
select {
case <- channel1:
// 执行 channel1 的操作
case data := <- channel2:
// 执行 channel2 的操作
case channel3 <- newData:
// 执行 channel3 的操作
default:
// 如果没有任何一个通道准备好,则执行 default 语句
}
}
```
这样就能够不断地等待多个通道的操作,并根据情况执行相应的操作。
阅读全文