Goツアーを読んだ その3(最後)
Goツアーの最終章のConcurrency(並列処理)について読みました。 このあたりを見ると、Webアプリの開発言語も開発でますが、バッチ処理やデータ集計などもパフォーマンスを意識して記述していける言語な印象を受けました。
concurrency より
- goroutine(ゴルーチン)はGOの並列処理のための軽量なスレッド
go fn()
のようにgo
をつけて関数を呼ぶことで実行する- チャネル型を使って値の送受信を行うとゴルーチンの同期が可能
ch := make(chan int)
のように変数の宣言を行う- チャネルのバッファが詰まると、実行時にdeadlockが発生する
- チャネルのクローズを判別するには
v,ok := <-ch
のokがfalseなこと for i := range ch {}
のように記述することでチャネルのクローズまでループするselect
ステートメントの話があったけど、ちょっとイメージできなかったのでとばす- 排他制御のための
sync.Mutex
のLock
,Unlock
メソッドで実現する