MST
星途 面试题库

面试题:Go中通道关闭后接收操作有何特点

在Go语言中,当一个通道被关闭后,对该通道进行接收操作会发生什么?请通过代码示例说明。
24.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 接收操作的行为
    • 当一个通道被关闭后,对该通道进行接收操作时,如果通道中还有数据,会正常接收数据。当通道中没有数据时,接收操作不会阻塞,而是立即返回,返回的是通道元素类型的零值,并且第二个返回值(一个布尔值)为false,用于标识通道是否已关闭。
  2. 代码示例
package main

import (
    "fmt"
)

func main() {
    ch := make(chan int)
    go func() {
        ch <- 10
        close(ch)
    }()

    // 第一次接收,通道中有数据
    data1, ok1 := <-ch
    fmt.Printf("第一次接收:data1 = %d, ok1 = %v\n", data1, ok1)

    // 第二次接收,通道中无数据且已关闭
    data2, ok2 := <-ch
    fmt.Printf("第二次接收:data2 = %d, ok2 = %v\n", data2, ok2)
}

上述代码中,首先向通道ch发送一个值10并关闭通道。然后进行两次接收操作,第一次接收能获取到发送的值10以及ok1true,第二次接收获取到的是int类型的零值0以及ok2false,表明通道已关闭且无数据。