ぷらこのきろく

メモとかテストとか備忘録とか

goルーチンテスト

func hoge(ch chan int) {
	v := <- ch
	v++
	fmt.Println(v)
	ch <- v
	return
}

func main() {
	ch := make(chan int, 1)
	ch <- 0
	for i:=0; i<10; i++{
		go hoge(ch)
	}
	return
}

こんなコードを書いてみた。期待した結果は

1
2
3
4
5
6
7
8
9
10

だったんだが、実際は何も表示されずにプログラムが終了する。
hoge()呼び出しのgoを取るとうまくいく。
小一時間悩んだ結果、goルーチンのhoge()が実行される前にメインのreturnが処理されてプログラムが終了してしまうらしいことに気づいた。
そっか、ということでforループのあとに

	time.Sleep(10 * time.Second)

で、終了を遅らせてみて、うまくいった。

並列処理ってちょっとむずかしいけどなんかおもしろいかもしれない。