English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Golang 基礎トレーニング

Golang 控制文

Golang 関数 & メソッド

Golang 構造体

Golang スライス & 配列

Golang 文字列(String)

Golang ポインタ

Golang インターフェース

Golang 并行

Golang 異常(Error)

Golang 他の雑項

Go 言語の複数のGoroutine

Goroutineは、プログラム内で存在する他のGoroutineと同時に独立して実行できる関数やメソッドです。言い換えれば、Go言語で同時に実行される活動はすべてGoroutinesと呼ばれます。Go言語では、プログラム内で複数のgoroutineを作成することができます。以下の文法のように、goキーワードを使用して関数やメソッドの呼び出しの前にgoroutineを作成することができます:

func name(){
// 文
}
//goキーワードでgoroutineを作成します
go name()

今、例を用いて、複数のgoroutineの作成と使用方法について説明します:

package main
import (
    "fmt"
    "time"
})
//goroutine 1
func Aname() {
    arr1 := [4}]string{"Rohit", "Suman", "Aman", "Ria"}
    for t1 := 0; t1 <= 3; t1++ {
        time.Sleep(150 * time.Millisecond)
        fmt.Printf("%s\n", arr1[t1}]
    }
}
// goroutine 2
func Aid() {
    arr2 := [4}]int{300, 301, 302, 303}
    for t2 := 0; t2 <= 3; t2++ {
        time.Sleep(500 * time.Millisecond)
        fmt.Printf("%d\n", arr2[t2}]
    }
}
func main() {
    fmt.Println("!...主 Go-routineが開始します...!
    // Goroutineを呼び出します 1
    go Aname()
    // Goroutineを呼び出します 2
    go Aid()
    time.Sleep(3500 * time.Millisecond)
    fmt.Println("\n!...主 Go-routineが終了します...!")
}

出力:

!...主 Go-routineが開始します...!
Rohit
Suman
Aman
300
Ria
301
302
303
!...主 Go-routineが終了します...!

作成:上記の例では、主goroutineの他に2つのgoroutineがあります、すなわちAnameおよびAidここでは、Aname著者の名前を印刷します。Aid著者のIDを印刷します。

作業:ここでは、2つのgoroutineがあります、すなわちAnameおよびAid、および1つの主goroutineがあります。このプログラムを実行する最初の時点で、主goroutineが階層化して「!...主 Go」を印刷します。-routineが開始します...!ここでは、主goroutineは親goroutineのように振る舞い、他のgoroutineはその子プロセスです。したがって、まず主goroutineを実行し、その後他のgoroutineを起動します。主goroutineが終了すると、他のgoroutineも終了します。したがって、主要なgoroutineの後で、AnameおよびAid goroutineも同時に作業を開始します。Aname goroutineは150msから作業を開始し、Aidは500msで作業を開始。