Ali*_*Ali 5 for-loop go goroutine
假设我想设置一个for循环但不想阻止执行,显然我可以将for循环放在一个函数中f并调用go f并继续我的生活,
但我很好奇是否有办法go for直接调用, 就像是:
fmt.Println("We are doing something")
//line below is my question
go for i := 1; i < 10; i ++ {
fmt.Println("stuff running in background")
}
// life goes on
fmt.Println("c'est la vie")
Run Code Online (Sandbox Code Playgroud)
Wes*_*sie 12
实现这一目标的唯一方法是通过围绕它创建一个函数.在您的示例中,这是您将如何做到这一点.
fmt.Println("We are doing something")
//line below is my question
go func() {
for i := 1; i < 10; i ++ {
fmt.Println("stuff running in background")
}
}()
// life goes on
fmt.Println("c'est la vie")
Run Code Online (Sandbox Code Playgroud)
记下最后函数的实际调用}().否则编译器会向你抱怨.
如果要在后台运行每个循环,请将goroutine嵌套在循环中并使用该sync.WaitGroup结构.
import "sync"
fmt.Println("We are doing something")
//line below is my question
wg := sync.WaitGroup{}
// Ensure all routines finish before returning
defer wg.Wait()
for i := 1; i < 10; i ++ {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("stuff running in background")
}()
}
// life goes on
fmt.Println("c'est la vie")
Run Code Online (Sandbox Code Playgroud)