使用close()关闭channel

2025-07-09T07:39:00

对于channel来说可以使用for range语法来不断地读值,但是如果当全部值已经读取完毕之后,for range就会阻塞。这个时候我们可以使用close(),来手动的关闭channel,此时for range就会退出了。

例如:

func main() {
    var msg chan int
    var wg sync.WaitGroup
    wg.Add(1)
    msg = make(chan int, 3)
    go func(msg chan int) {
        defer wg.Done()
        for data := range msg {
            fmt.Println(data)
        }
        fmt.Println("所有消息都读完啦!")
    }(msg)
    for i := 0; i < 3; i ++ {
        msg <- i;
    }
    close(msg)
    wg.Wait()
}

运行结果如下:

0
1
2
所有消息都读完啦!
有一个需要注意的地方,对于一个close了的channel来说可以继续读值,但是不能向里写值
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »