这是 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)