#【Golang】ゴルーチン②チャネル
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。
package main
//channel
//スレッド同士のデータのやり取り
//複数チャネルを作って、処理することも可能
import (
"fmt"
)
//sからcへ送信する処理
func goroutin1(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
//都度、計算結果を出力
fmt.Println(sum)
}
//全て処理が終わったら、channelに送信
c <- sum
}
func main() {
/*
//var 変数 chan データ型
var ch chan int
//送信専用と受信専用の型を指定すると厳密になり、異なる場合、コンパイルエラーになる。
//送受信に制限を設けない方がオススメ。
//受信専用チャネル
var ch1 <-chan int
//送信専用チャネル
var ch2 chan<- int
*/
/*
チャネルの特徴
キュー(待ち行列)の性質を持つ。
バッファサイズは格納できる領域。
キューにはFIFO(先入先出し)という性質がある。
チャネルに送信
ch <- 1
チャネルから受信
i := <- ch
*/
//スライス作成
s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//channelを作成
c := make(chan int)
//並行で走らせる
go goroutin1(s, c)
go goroutin1(s, c)
//channelからデータを受け取る
//データが入るまで待ってくれる。
//goroutine1でsumにデータが入ったらcに入り、xに送る
x := <-c
fmt.Println(x)
y := <-c
fmt.Println(y)
}