有没有一种方法可以将for循环作为go例程运行,而不将其放入单独的func中



假设我想设置一个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")

实现这一点的唯一方法实际上是围绕它创建一个函数。在您的示例中,这就是您要做的。

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")

记下函数在}()末尾的实际调用。否则编译器会向您投诉。

如果要在后台运行每个循环,请在循环中嵌套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")

最新更新