我必须遗漏一些关于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)
}
}
答案 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.")
}
答案 1 :(得分:1)
程序执行从初始化主程序包开始,然后 调用函数main。当该函数调用返回时, 程序退出。它不等待其他(非主要)goroutine 完整。
请参阅杰克关于工作版本的答案。