MST
星途 面试题库

面试题:Go语言中select语句在多路复用场景下的应用

假设你有多个通道(channel),分别用于接收不同类型的数据,如一个通道接收用户登录信息,另一个通道接收系统状态更新信息。请使用Go语言的select语句实现一个函数,能够同时监听这些通道,并在任意通道有数据时进行相应处理。描述你这样实现的思路,并编写完整的代码示例。
30.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用select语句可以同时监听多个通道的操作。
  2. 为每个通道准备一个case分支,当某个通道可读时,对应的case分支会被执行,从而处理该通道的数据。
  3. 可以添加一个default分支来处理当没有通道可读时的情况(可选),如果不添加default分支,select语句会阻塞直到某个通道可读。

代码示例

package main

import (
    "fmt"
)

func main() {
    userLoginCh := make(chan string)
    systemStatusCh := make(chan string)

    go func() {
        userLoginCh <- "user1 logged in"
    }()

    go func() {
        systemStatusCh <- "system status updated"
    }()

    select {
    case userLogin := <-userLoginCh:
        fmt.Println("User login:", userLogin)
    case systemStatus := <-systemStatusCh:
        fmt.Println("System status:", systemStatus)
    default:
        fmt.Println("No data available yet")
    }
}