初学go语言,对channel、并发感觉不太好理解。希望高人指点下。
下面的代码是我看到一本书上的,就是讲解channel的。
1package main 2 3import ( 4 "fmt" 5 "math/rand" 6) 7 8func test(ch chan int, i int) { 9 ch <- rand.Int() 10 fmt.Println(i, "go...") 11} 12 13func main() { 14 chs := make([]chan int, 10) 15 for i := 0; i < 10; i++ { 16 chs[i] = make(chan int) 17 go test(chs[i], i) 18 } 19 for _, ch := range chs { 20 value := <-ch 21 fmt.Println(value) 22 } 23 var i int 24 fmt.Scan(&i) 25 fmt.Println("done") 26}
这个程序的输出是
10 go... 2134020434 31597969999 41721070109 52068675587 61237770961 7220031192 82031484958 9583324308 10958990240 11413002649 121 go... 132 go... 143 go... 154 go... 165 go... 176 go... 187 go... 198 go... 209 go...
我的疑惑是,为什么第一个打印出来的是0 go...?
我想来想去还觉得应该是先输出随机数,然后才输出0 go..., 1 go..., 2 go..., .........呀。
如果先打印了0 go...,那么后面的1 go...,2 go...不是也应该和随机数间隔打印出来吗?
