フリーランス チャレンジ!!

フリーランス チャレンジ!!

現役フリーランスエンジニアが書く雑記ブログ

【Go言語】基本文法サンプル3(ゴルーチン、チャネル、select文 、同期)

スポンサーリンク

スポンサーリンク

Go 言語 基本 文法 サンプル

前回の続きで且つ最終回です。

 

www.ksakae1216.com

 

今回は、ゴルーチン、チャネル、select文、同期について解説します!

 

 

ゴルーチン

gist0a3d7bf520c67d2a5fc642c566b8d0ea

 

関数の前にgoを付けるだけで並列処理を実装できます。
ゴルーチン(並列処理)はとても軽いようです。
mainの処理はゴルーチンの終了を待たない。
ゴルーチンの結果を取得するにはチャネルを使う。(チャネルは次で説明します)

 

【実行結果】

f:id:ksakae1216:20180704145136p:plain

 

チャネル

gistf87619cef1b1e9607da7cac090e1eca6

 

送信専用、受信専用は主に関数の引数として受け取る際に使用する。
使わなくなったチャネルは最後にcloseする。
受信専用チャネルはクローズできない。
クローズ済みのチャネルにデータ送信するとランタイムパニックが発生。

 

【実行結果】 

f:id:ksakae1216:20180704145643p:plain

 

select文

gistb403cc61f37027c64598f3e2438f767b

 

複数のチャネルを待機する場合は、select文を使う。
defaultはどのチャネルも受診しなかった時に呼ばれる。
defaultが無い場合は、受信するまで待機する。

 

【実行結果】

f:id:ksakae1216:20180704150001p:plain

 

同期

gist80435d5c69ddf70b8d092edaabfdb1fe

 

WaitGroupをインクリメントする。
Doneでデクリメントする。
WaitはWaitGroupが0になるまで待つ。
つまり、並列でやりたい処理の数分インクリメントしてそれぞれの処理が終わればデクリメントしてWaitGroupが0になれば全ての並列処理が完了。

 

【実行結果】

f:id:ksakae1216:20180704150619p:plain

 

 Gitに登録しました

前回記事のソースに追加で今回のソースもGitに登録しました。

github.com

 

【関連記事】

このソースを試して見たい方は下記記事で簡単に開発環境を作成できますよ!

www.ksakae1216.com