ITPub博客

首页 > 应用开发 > > 关于go func 中 的分发方式的疑惑: 为什么i会被多次分发?

关于go func 中 的分发方式的疑惑: 为什么i会被多次分发?

作者:post200 时间:2019-07-16 11:15:45 0 删除 编辑
/* 
这个实验程序没什么复杂的逻辑,就是在两个go routine间建个通道传数
输出确实会乱序,不过好多重复呀
 
这个在for循环里的gofunc有意义么?
 
循环里面go? go 里面 循环????
emmmmmmm
希望大家能指点一下~
*/
 
func main() {
   out := printer() 
    
   for i := 0; i < 100; i++ {
      go func() { out <- i }()    // 为什么这里的i会被多次分发?
   }
 
   // go func() {
   //  for i := 0; i < 10; i++ {
   //    out <- i
   // }
   //}()  // 这样子是顺序了,也不知道是不是并发的
 
   time.Sleep(time.Minute)
}
 
func printer() chan int {
   out := make(chan int)
   go func() {
      for {
         r := <-out
         fmt.Println(r)
      }
   }()
   return out
}
 
 
/* 以下是部分输出
11
27
27
27
27
27
*/


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2249/viewspace-3128156/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    124
  • 访问量
    17972