小编kSe*_*Set的帖子

go中一个通道使用两个箭头写入另一个通道是什么意思

这是 Go 中的 Concurrency 一书中的代码示例。在 select 块中是以下语句

case takeStream <- <- valueStream:
Run Code Online (Sandbox Code Playgroud)

看不懂双箭头是干什么的,文中也没有解释。当我将其替换为时,输出会发生变化

case takeStream <- valueStream:
Run Code Online (Sandbox Code Playgroud)

所以这显然是必要的

功能齐全:

func take(done<- chan interface{}, valueStream <- chan interface{}, num int) <- chan interface{}{
    takeStream := make ( chan interface{})
    go func() {
        defer close(takeStream)
        for i := 0; i < num; i ++ {
            select {
            case <- done :
                return
            case takeStream <- <- valueStream:
            }
        }
    }()

    return takeStream
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果我理解正确,扩展出来的语句将是

i := 5
valueStream <- i
tmp <- …
Run Code Online (Sandbox Code Playgroud)

concurrency go channels

1
推荐指数
1
解决办法
358
查看次数

标签 统计

channels ×1

concurrency ×1

go ×1