乐闻世界logo
搜索文章和话题

Golang 如何使用“select”语句?

2月7日 11:09

在Go语言中,select语句是用来处理多个通道(channel)的发送与接收操作的。当你需要同时等待多个I/O操作时,select可以让你的代码等待多个通道操作,并且当其中一个通道准备好时,执行相应的代码块。

下面是select语句的基本用法:

go
package main import ( "fmt" "time" ) func main() { c1 := make(chan string) c2 := make(chan string) go func() { time.Sleep(2 * time.Second) c1 <- "one" }() go func() { time.Sleep(1 * time.Second) c2 <- "two" }() for i := 0; i < 2; i++ { select { case msg1 := <-c1: fmt.Println("Received", msg1) case msg2 := <-c2: fmt.Println("Received", msg2) } } }

在这个例子中,我们创建了两个通道c1c2,分别在不同的协程(goroutine)中向它们发送数据。在main函数的for循环中,我们使用select语句来接收数据。select会阻塞,直到其中一个通道准备好接收数据。一旦这种情况发生,相应的case语句就会执行。

select语句还可以与default子句一起使用,这样可以避免select阻塞:

go
select { case msg1 := <-c1: fmt.Println("Received", msg1) case msg2 := <-c2: fmt.Println("Received", msg2) default: fmt.Println("No message received") }

在这个版本中,如果所有通道都未准备好,select将会执行default子句,而不是阻塞等待。

select语句是处理并发操作和协程间通信的强大工具,在需要同时处理多个通道时非常有用。

标签:Golang