概要
Go 言語の仕様まとめ。
内容
- goroutine 並行処理
goroutine 並行処理
以下のようにループ処理が2つある場合、プログラムは上から下に実行されるため、
SubLoop関数のループ処理が完了後しないと、main関数のループ処理が実行されない。
func SubLoop() {
for i := 0; i < 20; i++ {
fmt.Println("SubLoop:", i)
}
}
func main() {
SubLoop()
for i := 0; i < 20; i++ {
fmt.Println("MainLoop:", i)
}
}
実行結果
SubLoop: 0
SubLoop: 1
SubLoop: 2
SubLoop: 3
SubLoop: 4
SubLoop: 5
SubLoop: 6
SubLoop: 7
SubLoop: 8
SubLoop: 9
MainLoop: 0
MainLoop: 1
MainLoop: 2
MainLoop: 3
MainLoop: 4
MainLoop: 5
MainLoop: 6
MainLoop: 7
MainLoop: 8
MainLoop: 9
goroutineを使うことで、2つのループ処理を並行して走らせることができる。
以下のように SubLoop( ) の前に go と記述するだけ。
func SubLoop() {
for i := 0; i < 20; i++ {
fmt.Println("SubLoop:", i)
// 実行結果がわかりやすいようにsleepを入れておく
time.Sleep(100 * time.Millisecond)
}
}
func main() {
go SubLoop()
for i := 0; i < 20; i++ {
fmt.Println("MainLoop:", i)
time.Sleep(200 * time.Millisecond)
}
}
実行結果
MainLoop: 0
SubLoop: 0
SubLoop: 1
MainLoop: 1
SubLoop: 2
SubLoop: 3
MainLoop: 2
SubLoop: 4
SubLoop: 5
MainLoop: 3
SubLoop: 6
SubLoop: 7
MainLoop: 4
SubLoop: 8
SubLoop: 9
MainLoop: 5
MainLoop: 6
MainLoop: 7
MainLoop: 8
MainLoop: 9