【Golang】ゴルーチン④range,close
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。
package main
//channelのrangeとclose
//結果を随時出力
import (
"fmt"
)
func goroutin2(s []int, c chan int) {
sum := 0
for _, v := range s {
//全部足す
sum += v
//すぐに送る
c <- sum
}
//終わったらchannelを閉じる
//これ以上ない時は閉じる
//閉じないと、中身以上取り出そうとしエラーになる
close(c)
}
func main() {
s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//実質1つしか入らないので、バッファは1でもいい
c := make(chan int, len(s))
goroutin2(s, c)
//go goroutine1(s, c)の結果をforで回す
//channelの場合、インデックスは無く、値を出力
//並列処理なので、値が入る度に出力される
//回数分i変数に入力
for i := range c {
fmt.Println(i)
}
//中は0になる
fmt.Println(len(c))
/*
1
3
6
10
15
21
28
36
45
55
0
*/
}
/*
別パターンが本にはある。スターティングGo言語 P191~P192
*/