面试题答案
一键面试以下是使用Go语言实现的示例代码:
package main
import (
"fmt"
"time"
)
func main() {
userRequestCh := make(chan string)
systemStatusCh := make(chan string)
timedTaskCh := make(chan string)
// 模拟向通道发送数据
go func() {
time.Sleep(2 * time.Second)
userRequestCh <- "User request received"
}()
go func() {
time.Sleep(3 * time.Second)
systemStatusCh <- "System status updated"
}()
go func() {
time.Sleep(1 * time.Second)
timedTaskCh <- "Timed task signal"
}()
timeout := time.After(5 * time.Second)
for {
select {
case req := <-userRequestCh:
fmt.Println("处理用户请求:", req)
case status := <-systemStatusCh:
fmt.Println("处理系统状态更新:", status)
case task := <-timedTaskCh:
fmt.Println("处理定时任务信号:", task)
case <-timeout:
fmt.Println("操作超时")
return
}
}
}
在上述代码中:
- 定义了三个不同类型的通道
userRequestCh
、systemStatusCh
和timedTaskCh
分别用于接收用户请求、系统状态更新和定时任务的信号。 - 使用
go
协程模拟向通道发送数据。 - 定义了一个
timeout
通道,用于设置超时时间为5秒。 - 在
select
语句中,监听这三个通道和timeout
通道,当任意通道有数据到来时,相应的分支会被执行,处理对应的事件。如果超过5秒没有任何通道接收到数据,timeout
分支会被执行,程序结束。
注意,在实际应用中,需要根据具体需求调整通道的类型、发送和接收逻辑以及超时时间等。