以下是一个例子,使用了多个并行的 select 语句:

package main

import (
	"fmt"
	"time"
)

func main() {
	ch1 := make(chan string)
	ch2 := make(chan string)
	ch3 := make(chan string)
	done := make(chan bool)

	go func() {
		time.Sleep(2 * time.Second)
		ch1 <- 'Hello'
	}()

	go func() {
		time.Sleep(4 * time.Second)
		ch2 <- 'World'
	}()

	go func() {
		time.Sleep(6 * time.Second)
		ch3 <- '!' 
	}()

	go func() {
		select {
		case msg := <-ch1:
			fmt.Println(msg)
		case msg := <-ch2:
			fmt.Println(msg)
		case msg := <-ch3:
			fmt.Println(msg)
		}

		done <- true
	}()

	go func() {
		select {
		case msg := <-ch1:
			fmt.Println(msg)
		case msg := <-ch2:
			fmt.Println(msg)
		case msg := <-ch3:
			fmt.Println(msg)
		}

		done <- true
	}()

	go func() {
		select {
		case msg := <-ch1:
			fmt.Println(msg)
		case msg := <-ch2:
			fmt.Println(msg)
		case msg := <-ch3:
			fmt.Println(msg)
		}

		done <- true
	}()

	<-done
	<-done
	<-done
}

在这个例子中,我们创建了 3 个通道 (ch1,ch2 和 ch3) 和一个用于通知完成的通道 (done)。

然后,我们启动了 3 个并发的 goroutine,每个都有一个 select 语句来接收来自不同通道的消息。每个 select 语句都会在不同的时间间隔后接收到消息,并打印出来。

最后,我们使用 3 个 <-done 语句来等待所有的 goroutine 完成。

这样,我们就实现了多个并行的 select 语句。当有多个通道都准备好发送消息时,select 语句会随机选择其中一个来接收消息。

Go 语言中使用多个并行 select 语句的示例

原文地址: https://www.cveoy.top/t/topic/p6VF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录