MST
星途 面试题库

面试题:Go中通道关闭时接收操作的状态变化

在Go语言中,当一个通道被关闭后,对该通道进行接收操作会有怎样的状态变化?请通过代码示例说明。
16.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

当一个通道被关闭后,对该通道进行接收操作会有以下状态变化:

  1. 如果通道中还有数据,接收操作会正常接收数据。
  2. 当通道中数据被接收完后,接收操作不会阻塞,会立即返回,且返回值为通道类型的零值和一个布尔值false,用于表示通道是否关闭。

以下是代码示例:

package main

import (
    "fmt"
)

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

    go func() {
        for i := 0; i < 5; i++ {
            ch <- i
        }
        close(ch)
    }()

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

在上述代码中:

  1. 首先创建了一个整数类型的通道ch
  2. 在一个匿名goroutine中,向通道发送5个整数,然后关闭通道。
  3. 在主goroutine中,使用for {}循环持续从通道接收数据,ok用于判断通道是否关闭。当okfalse时,表示通道已关闭,退出循环。