職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

ゴルーチン間の通信(チャンネル)

2023年04月18日 | GO言語
ゴルーチン間の通信


【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト

【チャンネルとは】
チャンネルは同時に実行されているゴルーチン間や、メインルーチンとゴルーチンとの間で、特定の形の値を受け渡す通信機構を提供する

例えば、bool値を受け渡したいとする時、
1、チャンネルを作る
ch := make(chan bool)
これで、同期しているチャンネルが作られた。
チャンネルに情報を送る為には「<-」を用います。

2、bool型のチャンネルにtrueを送ってみる。
ch <- true

3、チャンネルから情報を受取るも、「<-」を使う
x <- ch

4、受け取った事実だけを知りたい時
<- ch

5、チャンネルから正しく受け取った受け取ったどうかの判定
x,ok := <-ch

いずれにしても、これらのコードはチャンネルから、情報を受け取るまで待ちます。

・サンプルコード
// chan.go
package main

import (
"fmt"
"time"
)

func main() {
//チャンネルを作る
done := make(chan bool)

//ゴルーチンで"+"を出力する
go func() {
for i := 0; i < 10; i++ {
time.Sleep(10 * time.Millisecond)
fmt.Printf("+")
}
done <- true //終わったらtrueを送る
}()

//メインルーチンで"/"を出力する
for i := 0; i < 10; i++ {
time.Sleep(10 * time.Millisecond)
fmt.Printf("/")
}
//trueが送られるのを待って受け取る
<- done

fmt.Printf("\n終了\n")

}
・実行
PS D:\GO言語\サンプルプログラム\Go-8> go run chan.go
+//+/++//++//++//++/
終了


コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする