面试题答案
一键面试基本原理
select
语句用于在Go语言中进行多路复用,它可以同时等待多个通信操作(如通道的读写)。select
会阻塞,直到其包含的某个通信操作可以继续执行,然后就会执行该通信操作。如果有多个操作都准备好,select
会随机选择其中一个执行。
使用方式
select
语句由关键字select
和大括号括起来的多个case
语句组成,每个case
语句代表一个通信操作(通道读或写)。- 可以包含一个
default
语句,当没有任何case
语句可以执行时,default
语句会立即执行,从而避免select
阻塞。
示例代码
package main
import (
"fmt"
)
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
go func() {
ch1 <- 10
}()
go func() {
ch2 <- 20
}()
select {
case data1 := <-ch1:
fmt.Println("从ch1中读取到数据:", data1)
case data2 := <-ch2:
fmt.Println("从ch2中读取到数据:", data2)
}
}
在上述示例中,创建了两个通道ch1
和ch2
,然后分别在两个匿名goroutine中向通道发送数据。select
语句会等待,直到其中一个通道有数据可读,然后读取数据并打印。由于两个通道的发送操作都在不同的goroutine中异步执行,所以select
会随机选择先准备好的通道进行读取操作。