【问题标题】:why doesn't this go code print anything with a goroutine [duplicate]为什么这个go代码不使用goroutine打印任何东西[重复]
【发布时间】:2017-07-02 06:16:22
【问题描述】:

我一定遗漏了一些关于 goroutine 的非常基本的东西,但我环顾四周,我看不出有任何原因导致这不起作用...

package main

import "fmt"

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

【问题讨论】:

    标签: go


    【解决方案1】:

    你的程序在你的 goroutine 有机会运行之前就完成了。

    这是带有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

    【讨论】:

      【解决方案2】:

      From the spec of Go:

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

      查看 Jack 的工作版本的答案。

      【讨论】:

        猜你喜欢
        • 2014-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        • 2019-05-18
        • 1970-01-01
        • 2015-08-23
        相关资源
        最近更新 更多