我试图实现一个示例 Go 代码,用于使用来自 go 例程的返回通道,而主函数中没有任何“读取块”。这里,fanIn 函数接受来自其他两个例程的通道并返回作为输入。
此处,预期输出是来自两个内部例程的随机输出。但实际输出总是一个“ann”后跟一个“john”,在任何情况下都不是随机的。
为什么我没有得到随机输出?
去游乐场:http : //play.golang.org/p/46CiihtPwD
实际输出:
you say: ann,0
you say: john,0
you say: ann,1
you say: john,1
......
代码:
package main
import (
"fmt"
"time"
)
func main() {
final := fanIn(boring("ann"), boring("john"))
for i := 0; i < 100; i++ {
fmt.Println("you say:", <-final)
}
time.Sleep(4 * time.Second)
}
func boring(msg string) chan string {
c1 := make(chan string)
go func() {
for i := 0; ; i++ {
c1 <- fmt.Sprintf("%s,%d", msg, i)
time.Sleep(time.Second)
}
}()
return c1
}
func fanIn(input1, input2 <-chan string) chan string {
c := make(chan string)
go func() {
for {
c <- <-input1
}
}()
go func() {
for {
c <- <-input2
}
}()
return c
}
相关分类