MST

星途 面试题库

面试题:Go中select语句在并发场景下如何处理多个通道操作

请简述Go语言中select语句的基本语法,并举例说明在一个有多个通道的并发程序中,select语句如何实现对不同通道操作(如接收或发送数据)的监听与执行,假设存在两个通道`ch1`和`ch2`,你需要通过select语句在接收到任一通道的数据时打印相应信息。
45.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

Go语言中select语句基本语法

select语句用于监听多个通道的操作(接收或发送数据),其基本语法如下:

select {
case <-chan1:
    // 当从chan1接收到数据时执行的代码
case chan2 <- value:
    // 当成功向chan2发送value时执行的代码
default:
    // 当以上所有case都未准备好时执行的代码(可选)
}

示例

package main

import (
    "fmt"
)

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

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

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

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

在上述示例中,创建了两个通道ch1ch2,并通过两个匿名goroutine分别向通道发送数据。select语句监听这两个通道,当任一通道接收到数据时,打印相应的信息。如果多个通道同时准备好,select会随机选择其中一个case执行。