MoTLab -GO Inc. Engineering Blog-MoTLab -GO Inc. Engineering Blog-

実践Go並行プログラミング


※この文を削除し、代わりに何らかの「一覧ページでの見出し用の文章」を記入お願いします。また、文内にリンクは置けますが、画像・数式・埋め込みなどのテキスト以外の要素を貼ることはできません


ここからが本文になります。↑の区切り線が見出し文との区切りになります。※この行は削除してください

goroutine 間通信

他の goroutine に何か情報を伝えたい時、channel を介するのが一般的です。ただしこれにはいくつかのパターンがあります。

  • 1回だけ伝えたい、タイミングだけ伝えたい、相手は1つ
    • → 何度も伝えたいの場合と同じ
  • 1回だけ伝えたい、タイミングだけ伝えたい、ブロードキャストしたい
    • close(ch)
    • 受け側では1つの ch を共有する
  • 1回だけ伝えたい、データも渡したい、相手は1つ
    • → 何度も伝えたいの場合と同じ
  • 1回だけ伝えたい、データも渡したい、ブロードキャストしたい
    • → 何度も伝えたい の場合と同じ
  • 何度も伝えたい、タイミングだけ伝えたい、相手は1つ
    • ch <- struct{}{}
  • 何度も伝えたい、タイミングだけ伝えたい、ブロードキャストしたい
    • 一見ループを使いたくなるが、sync パッケージの何かで出来るのでは。
  • 何度も伝えたい、データも渡したい、相手は1つ
    • ch <- data
  • 何度も伝えたい、データも渡したい、ブロードキャストしたい
    • // 注: ch はブロックしないように buffered channel にする // これ他のブロードキャストとは違って ch は1つにできない for _, ch := range channels { ch <- data }
    • これも sync パッケージで共有的な何かが使えるのでは?

ここから下はそのまま使ってください(アレンジしていただいても良いです!)※この行は削除してください


We're Hiring!

📢
Mobility Technologies ではともに働くエンジニアを募集しています。

興味のある方は 採用ページ も見ていただけると嬉しいです。

Twitter @mot_techtalk のフォローもよろしくお願いします!