MST

星途 面试题库

面试题:Go通道关闭后读取操作的基础行为

在Go语言中,当一个通道被关闭后,对其进行读取操作会返回什么值,有怎样的规律?请举例说明。
42.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,当一个通道被关闭后,对其进行读取操作有以下规律:

  1. 如果通道中仍有数据:读取操作会正常返回通道中的数据,直到数据读完。
  2. 通道中无数据且已关闭:读取操作会立即返回通道类型的零值和false

示例代码如下:

package main

import (
    "fmt"
)

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

    go func() {
        ch <- 1
        ch <- 2
        close(ch)
    }()

    for {
        data, ok := <-ch
        if!ok {
            break
        }
        fmt.Println("Received:", data)
    }
    fmt.Println("Channel is closed")
}

在上述代码中,ch通道先发送两个数据然后关闭。主函数在循环中读取通道数据,当okfalse时,表示通道已关闭且无数据,此时退出循环。

所以,关闭通道后读取,先读取剩余数据,无数据时返回零值和false