Gogoroutine没有运行

今天,我了解了buffered channels. 我面临的问题是,我正在使用 WaitGroup 的Wait函数来执行所有 goroutine。

但并不是所有的 goroutine 都在执行,程序在没有等待所有 goroutine 完成的情况下就结束了。

代码:

func main() {
    
    // initializing a WaitGroup
    var wg sync.WaitGroup

    // adding 3 counts/buffer to the WaitGroup
    wg.Add(3)
    
    fmt.Println("Start Goroutines")
    go responseSize("https://www.golangprograms.com", &wg)
    go responseSize("https://stackoverflow.com", &wg)
    go responseSize("https://coderwall.com", &wg)

    // wait for goroutines to finish
    wg.Wait()
    fmt.Println("Terminating the main program")

}

// just prints the response size of the body returned 
func responseSize(url string, wg *sync.WaitGroup) {
    // schedule the Done() call when the goroutine is finished
    wg.Done()

    fmt.Println("Step1: ", url)
    response, err := http.Get(url)
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Println("Step2: ", url)
    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Step3: ", len(body))
}

我在这里错过了什么吗?

回答

代替

wg.Done()

defer wg.Done()

按照它的编写方式,你的 goroutine 会在它们开始运行时发出工作结束的信号,而不是在它们结束时,允许主 goroutine 继续并退出。


以上是Gogoroutine没有运行的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>