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

バックグラウンドで各ループを実行したい場合は、ゴルーチンをループ内にネストし、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 に答える