ウエイト
【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト
【ウェイト】
ゴルーチンの終了タイミングは正確に予想が出来ないため、ウェイトグループ(WaitGroup)を使ってゴルーチンが終了するまで待つようにする。
・サンプルコード
// gosample.go
package main
import (
"fmt"
"sync"
"time"
)
// sync.WaitGroupの値を保存する変数の宣言
var wg sync.WaitGroup
// 一度に文字列(厳密には文字)を1個出力すつことを10回繰り返す関数を定義する
func printjob(s string) {
defer wg.Done() //終了を待つゴルーチンの数がデクリメントされる
for i := 0; i < 10; i++ {
time.Sleep(10 * time.Millisecond)
fmt.Printf("%s", s)
}
}
// メイン
func main() {
wg.Add(3) //待つジョブを3にする
fmt.Println("A start")
go printjob("A") //ゴルーチン
fmt.Println("B start")
go printjob("B") //ゴルーチン
fmt.Println("C start")
go printjob("C") //ゴルーチン
wg.Wait() //すべてのジョブが終わるのを待つ
fmt.Printf("\n終了\n")
}
・実行
PS D:\GO言語\サンプルプログラム\Go-8> go run gosample.go
A start
B start
C start
CABACBBCAACBCABACBCBACABABCBAC←順不同
終了
【wg.Wait()を書かない場合】
PS D:\GO言語\サンプルプログラム\Go-8> go run gosample.go
A start
B start
C start
終了