Go 语言选择语句演示

Beginner

This tutorial is from open-source community. Access the source code

简介

本实验旨在测试你对 Go 语言 select 语句的了解,该语句可让你等待多个通道操作。

选择语句(Select)

在本实验中,给你两个通道 c1c2,它们会在一段时间后接收一个值。你的任务是使用 select 语句同时等待这两个值,并在每个值到达时打印出来。

  • 你应该使用 select 语句来等待这两个通道。
  • 你应该在每个通道接收到值时打印该值。
## 我们按预期先后接收到值 "one" 和 "two"。
$ time go run select.go
接收到 one
接收到 two

## 注意,总执行时间仅约为 2 秒,因为 1 秒和 2 秒的 `Sleep` 操作是并发执行的。
实际时间 0m2.245s

以下是完整代码:

// Go 语言的 _select_ 语句可让你等待多个通道操作。将 goroutine 和通道与 select 结合使用是 Go 语言的一项强大功能。

package main

import (
	"fmt"
	"time"
)

func main() {

	// 在我们的示例中,我们将通过两个通道进行选择。
	c1 := make(chan string)
	c2 := make(chan string)

	// 每个通道会在一段时间后接收一个值,以模拟例如在并发 goroutine 中执行的阻塞式 RPC 操作。
	go func() {
		time.Sleep(1 * time.Second)
		c1 <- "one"
	}()
	go func() {
		time.Sleep(2 * time.Second)
		c2 <- "two"
	}()

	// 我们将使用 `select` 语句同时等待这两个值,并在每个值到达时打印出来。
	for i := 0; i < 2; i++ {
		select {
		case msg1 := <-c1:
			fmt.Println("接收到", msg1)
		case msg2 := <-c2:
			fmt.Println("接收到", msg2)
		}
	}
}

总结

本实验测试你在 Go 语言中使用 select 语句等待多个通道操作的能力。通过完成本实验,你将更好地理解如何使用 select 来协调并发的 goroutine。