如果我在函数中生成一个goroutine,并且该函数返回,该goroutine会终止,还是会继续执行?
答案 0 :(得分:0)
您必须等待程序主线程(或在main方法中说完)中的所有goroutine完成。
举个例子
package main
import (
"fmt"
"time"
)
func foo() {
go func() {
fmt.Println("sleeping for 5 sec")
time.Sleep(5 * time.Second)
fmt.Println("Done")
}()
}
func main() {
foo()
}
当您运行上述代码时,它将立即退出(意味着主线程将不等待goroutine首先完成)。
要在 go 中实现此目标,我正在使用https://golang.org/pkg/sync/#WaitGroup
package main
import (
"fmt"
"sync"
"time"
)
// see https://golang.org/pkg/sync/#WaitGroup
var wg sync.WaitGroup
func foo() {
go func() {
wg.Add(1)
defer wg.Done()
fmt.Println("sleeping for 5 sec")
time.Sleep(5 * time.Second)
fmt.Println("Done")
}()
}
func main() {
foo()
fmt.Println("Waiting for goroutine to finish")
wg.Wait()
fmt.Println("All goroutine to finished")
}