在日常使用Go语言进行并发编程时,channel(通道)是我们经常用到的关键工具。但你是否遇到过这样的问题:当一个channel被关闭后,我们还能从中读取数据吗?如果能,会读到什么?这篇文章就来彻底搞懂这个问题。

先来看一段简单的代码示例:

package main

import "fmt"

func main() {
    ch := make(chan int, 3)  // 创建缓冲大小为3的channel
    ch <- 1
    ch <- 2
    close(ch)  // 关闭channel

    fmt.Println(<-ch)  // 输出:1
    fmt.Println(<-ch)  // 输出:2
    fmt.Println(<-ch)  // 输出:0
}