golang 并发问题

在Go语言中,通道(channel)是用来在协程(goroutine)之间安全地传递数据的机制。当一个通道被关闭后,仍然可以从通道中接收值,直到通道中的所有值都被成功接收。一旦通道中没有值,并且通道被关闭,尝试从该通道接收数据将返回零值,并且不会阻塞(对于基本类型是0或nil,对于引用类型是nil),并且不会阻塞。

package main

import (
    "fmt"
)

func main() {
    ch := make(chan int, 2) // 创建一个容量为2的int类型通道
    ch <- 10
    ch <- 20
    close(ch) // 关闭通道

    // 接收通道中的值
    fmt.Println(<-ch) // 输出: 10
    fmt.Println(<-ch) // 输出: 20
    fmt.Println(<-ch) // 输出: 0,因为没有更多的值,通道已关闭
}

如果不确定通道是否关闭可使用下面的进行检查

value, ok := <-ch
if !ok {
    // 通道已关闭或为空,并且没有更多的值可以接收
    fmt.Println("Channel is closed or empty")
} else {
    fmt.Println(value)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!