MST

星途 面试题库

面试题:Go中select多路复用的超时处理

假设你有三个通道`ch1`、`ch2`和`ch3`,分别发送不同类型的数据(如字符串、整数、结构体)。使用select多路复用处理这些通道的数据接收,同时添加一个10秒的超时机制。如果10秒内没有任何通道接收到数据,则打印'操作超时'并退出程序。请编写完整的Go代码实现此功能。
47.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "time"
)

type MyStruct struct {
    Field1 string
    Field2 int
}

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

    go func() {
        // 模拟向通道发送数据,这里可以根据实际需求修改
        time.Sleep(5 * time.Second)
        ch1 <- "Hello from ch1"
    }()

    go func() {
        time.Sleep(8 * time.Second)
        ch2 <- 42
    }()

    go func() {
        time.Sleep(12 * time.Second)
        ch3 <- MyStruct{Field1: "struct data", Field2: 100}
    }()

    select {
    case data1 := <-ch1:
        fmt.Printf("Received from ch1: %s\n", data1)
    case data2 := <-ch2:
        fmt.Printf("Received from ch2: %d\n", data2)
    case data3 := <-ch3:
        fmt.Printf("Received from ch3: %+v\n", data3)
    case <-time.After(10 * time.Second):
        fmt.Println("操作超时")
        return
    }
}