Go语言选择语句演示

GolangGolangBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL go(("`Golang`")) -.-> go/ConcurrencyGroup(["`Concurrency`"]) go/ConcurrencyGroup -.-> go/select("`Select`") subgraph Lab Skills go/select -.-> lab-15503{{"`Go语言选择语句演示`"}} end

选择语句(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。

您可能感兴趣的其他 Golang 教程