ryochack.blogスマートフォン用の表示で見るryochack.blogこの広告は、90日以上更新していないブログに表示しています。2013-08-08Go言語での複数チャネルからのメッセージ受信golangGoではgoroutineを使うことで並行処理をとても簡単に実行できるが、複数goroutineとの同期が難しい。そこで、複数走らせたgoroutineのメッセージを用いた同期方法について考えてみた。fmt.Println("exit")}selectによる複数メッセージ受信selectを使って複数チャネルからのメッセージ受信を同時に行う。チャネル通信の完了は、完了通知用のチャネルを生成して通知する。受信部分をgoroutine化して複数メッセージを非同期受信メッセージの受信処理を無名関数でラッピングして、チャネル毎にgoroutine化して実行。range節でチャネル受信をループ化しているため、チャネルがcloseされるとループが終了する。main関数での受信完了同期にはWaitGroupを使っている。受信部分をgoroutine化する方法は、main関数でメッセージを受け取ってない。reporterからmainに処理結果を渡さなくちゃいけないときには別途チャネルが必要になるけれども、メッセージの値を表示させるだけならコードがシンプルになっていい。以下のようにWaitGroup.Wait()をgoroutine化して待つ方法もある。(1)ArchiveLinkstwittergithubtumblrはてなダイアリーはてなブログをはじめよう!ryochackさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。