Go言語 – 10.ゴルーチン

2019-02-03Go言語

ゴルーチン

ゴルーチンとは、マルチスレッドのことを指すようです。
別名では「go文」といわれるようです。

記述方法

func subtask() {
    for {
        fmt.Println("ああああああ")
    }
}
 
func main() {
    go subtask() // ゴルーチン開始
    for {
        fmt.Println("いいいいいい")
    }
}

出力結果は以下の通りになります。
※マルチスレッドなので、必ずこのような表示とは限りませんが。

ああああああ
いいいいいい
ああああああ
いいいいいい
ああああああ


ゴルーチンを終了するには

次の3種類の方法があります。
1.関数が終わる
2.returnで抜ける
3.runtime.Goexit()を実行する

ゴルーチン間の情報受け渡し

ゴルーチン間で情報を受け渡しすることが出来ます。
それが「チャネル」と呼ばれるものです。

チャネルの作り方は次のとおりです。

var ch chan int      // chはint型のチャネル
var ch1 <-chan int //受信専用
var ch2 chan<- int //送信専用

もしくは

ch := make(chan int)

これで作成することが出来ます。
次の、作成したチャネルの使い方は

func subtask(ch <-chan int) {
  for {
    data := <-ch
    fmt.Println(data)
  }
}

func main() {
  ch := make(chan int)

  go subtask(ch)

  idx := 0
  for idx < 10 {
    ch <- idx
    idx++
  }
}

出力結果は次のとおりです。
0
1
2
3
4
5
6
7
8
9

 

株式会社システムトラスト

人材募集中です。

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ