0
点赞
收藏
分享

微信扫一扫

Golang多路发送和接收channel代码示例(select...case)


在Go语言中,可以使用select语句实现多路发送和接收通道的操作。select语句允许在多个通信操作中选择可用的操作进行执行。以下是一个示例代码,演示了多路发送和接收通道的情况:

package main

import (
	"fmt"
	"time"
)

func main() {
	ch1 := make(chan int)
	ch2 := make(chan int)

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

	go func() {
		time.Sleep(3 * time.Second)
		ch2 <- 2
	}()

	select {
	case <-ch1:
		fmt.Println("Received from ch1")
	case <-ch2:
		fmt.Println("Received from ch2")
	case <-time.After(4 * time.Second):
		fmt.Println("Timeout")
	}
}

在上面的示例中,我们创建了两个整型通道ch1ch2。然后,我们启动了两个goroutine,每个goroutine在不同的时间段向通道发送数据。

在主goroutine中,我们使用select语句来监听多个通道的操作。select语句会等待其中一个通信操作完成,并执行对应的代码块。在本例中,我们使用<-ch1<-ch2分别接收ch1ch2通道的数据,然后打印相应的消息。

由于ch1通道的发送操作在2秒后完成,而ch2通道的发送操作在3秒后完成,因此select语句会等待2秒后,接收到ch1通道的数据,并打印"Received from ch1"。如果ch1通道的发送操作较慢,ch2通道的发送操作较快,则会接收到ch2通道的数据,并打印"Received from ch2"。

如果在4秒内没有任何通道的发送操作完成,select语句中的time.After会触发,打印"Timeout"。

通过使用select语句,我们可以同时等待多个通道的操作,并根据不同的操作结果执行相应的逻辑,实现了多路发送和接收通道的处理。


举报

相关推荐

0 条评论