MST

星途 面试题库

面试题:Go语言中通道选择机制的基本使用

请用Go语言编写一段代码,展示通道选择机制(select语句)的基本用法,至少包含两个不同的通道操作,并解释这段代码在什么情况下会执行各个分支。
25.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

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

    go func() {
        ch1 <- 1
    }()

    go func() {
        ch2 <- 2
    }()

    select {
    case val := <-ch1:
        fmt.Printf("从ch1接收到数据: %d\n", val)
    case val := <-ch2:
        fmt.Printf("从ch2接收到数据: %d\n", val)
    }
}

代码解释

  1. 通道创建:创建了两个整型通道 ch1ch2
  2. 发送数据的 goroutine:启动了两个匿名 goroutine,分别向 ch1 发送 1,向 ch2 发送 2
  3. select 语句select 语句用于监听多个通道操作(接收或发送)。
    • 第一个分支case val := <-ch1:,当 ch1 有数据可接收时,会执行此分支,将接收到的数据赋值给 val 并打印。
    • 第二个分支case val := <-ch2:,当 ch2 有数据可接收时,会执行此分支,将接收到的数据赋值给 val 并打印。

在这个例子中,由于两个 goroutine 并发向通道发送数据,select 语句会阻塞,直到其中一个通道有数据可接收。一旦某个通道准备好,就会执行对应的 case 分支。如果多个通道同时准备好,select 会随机选择一个 case 分支执行。