MST

星途 面试题库

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

在Go语言中,当一个通道被关闭后,对其进行读取操作会发生什么?请通过代码示例说明,并解释返回值的意义。
32.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

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

  1. 如果通道中仍有数据,读取操作会正常返回通道中的数据,不会阻塞。
  2. 当通道中没有数据时,读取操作会立即返回,返回通道类型的零值和一个布尔值okokfalse表示通道已关闭且无数据可读。

以下是代码示例:

package main

import (
    "fmt"
)

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

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

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

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

在上述代码中:

  • 第一次读取data1, ok1 := <-ch,由于通道中存在数据10,所以data110ok1true
  • 第二次读取data2, ok2 := <-ch,此时通道已关闭且无数据,所以data2int类型的零值0ok2false。这表明通道已关闭且没有数据可供读取。