为什么这不用代码打印任何goroutine

时间:2017-02-14 04:41:31

标签: go

我必须遗漏一些关于goroutines的基本信息,但是我环顾四周,看不出有什么原因导致这种情况无效......

package main

import "fmt"

func main() {
    for i := 0; i < 20; i++ {
        //fmt.Println(i)
        go func(j int) {
            fmt.Println(j + 100)
        }(i)
    }
}

2 个答案:

答案 0 :(得分:5)

您的计划在您的goroutines有机会运行之前完成。

这是您的代码WaitGroup

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 20; i++ {
        wg.Add(1)
        go func(j int) {
            defer wg.Done()
            fmt.Println(j + 100)
        }(i)
    }
    fmt.Println("Waiting...")
    wg.Wait()
    fmt.Println("Done.")
}

https://play.golang.org/p/lmCPU9-qkB

答案 1 :(得分:1)

From the spec of Go

  

程序执行从初始化主程序包开始,然后   调用函数main。当该函数调用返回时,   程序退出。它不等待其他(非主要)goroutine   完整。

请参阅杰克关于工作版本的答案。