MST

星途 面试题库

面试题:Go语言中通道关闭后读取行为基础

在Go语言里,当一个通道被关闭后,继续从该通道读取数据会发生什么?请通过代码示例说明。
12.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

当一个通道被关闭后,继续从该通道读取数据,会读取到通道类型的零值,且第二个返回值为 false,表示通道已关闭。

以下是代码示例:

package main

import (
    "fmt"
)

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

    go func() {
        ch <- 10
        close(ch)
    }()

    // 第一次读取
    data, ok := <-ch
    if ok {
        fmt.Printf("第一次读取:数据 %d,通道未关闭\n", data)
    } else {
        fmt.Println("第一次读取:通道已关闭")
    }

    // 第二次读取
    data, ok = <-ch
    if ok {
        fmt.Printf("第二次读取:数据 %d,通道未关闭\n", data)
    } else {
        fmt.Println("第二次读取:通道已关闭")
    }
}

上述代码中,先向通道 ch 发送一个值并关闭通道。之后进行两次读取操作,第一次读取能获取到发送的值,第二次读取则获取到通道类型 int 的零值 0okfalse 表示通道已关闭。