Go言語 – 10.ゴルーチン
ゴルーチン
ゴルーチンとは、マルチスレッドのことを指すようです。
別名では「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