MST

星途 面试题库

面试题:Go select语句并发测试中通道阻塞与超时处理

在Go的select语句用于并发测试场景下,当所有通道都处于阻塞状态时,如何通过合理设置超时机制来避免程序无限期等待?请编写代码示例,展示如何实现一个带超时的select语句,在读取某个通道数据时,如果在指定时间内未获取到数据,则执行相应的超时处理逻辑。
23.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int)
    var result int

    select {
    case result = <-ch:
        fmt.Println("Received data:", result)
    case <-time.After(2 * time.Second):
        fmt.Println("Timeout occurred.")
    }
}

在上述代码中:

  1. 我们创建了一个无缓冲通道 ch
  2. 使用 select 语句来尝试从通道 ch 读取数据。
  3. 同时,使用 time.After 函数创建一个定时器,2 秒后向其返回的通道发送一个值。
  4. 如果 2 秒内从 ch 通道读取到数据,就会执行 case result = <-ch 分支;如果 2 秒内未读取到数据,就会执行 case <-time.After(2 * time.Second) 分支,输出超时信息。