go channel问题
```go
package main
import (
"fmt"
"time"
)
func printCount(c chan int){
num := 0
for num >= 0{
num = <-c
fmt.Print(num," ")
}
}
func main(){
c := make(chan int)
a := []int{8,6,7,5,3,0,9,-1}
go printCount(c)
for _,v := range a{
c <- v
}
time.Sleep(time.Millisecond * 1)
fmt.Println("End of main")
}
```
上述代码输出8,6,7,5,3,0,9,-1 end of main ,为什么-1会输出呀
把time.Sleep()注释后就不会输出-1,这是为啥
没有找到相关结果
已邀请:
8 个回复
simple - 既要有梦想,又要有实力
赞同来自: elangx
为了保证所有子线程都结束,main才能结束你可以试试sync.WaitGroup
willee
赞同来自: emacsist
lmw - hello world
赞同来自: ilmari
2. time.Sleep 去掉 -1依然能输出(有时候不输出) ,主程序运行速度不固定,有时候主程序执行完的时候 goroutine 还没完,就看不到-1了
emacsist - https://emacsist.github.io
赞同来自: ilmari
vr
赞同来自: ilmari
for range 循环要互相等待,所以事实上,
main goroutine : for range a 数组的每一个值 并: c <- v
printCount goroutine: 都会接受到 num := <-c
如果加上time.sleep 1秒,则printCount 有机会执行
fmt.Print(num, " ") 这一句
反之几乎没有机会打印a数组最后一个值-1,main直接结束
sheepbao - https://sheepbao.github.io 爱go,爱编程,领域网络开发,流媒体、分布式、网络加速
changjixiong - 时常做白日梦的程序员
guang7night