5

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

2 回答 2

13

做到这一点的唯一方法确实是围绕它创建一个函数。在您的示例中,您将这样做。

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

记下函数最后的实际调用}()。否则编译器会向您抱怨。

于 2013-09-04T21:51:19.857 回答
11

如果要在后台运行每个循环,请将 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")
于 2013-09-04T23:17:10.030 回答