15 分鐘學習 Go 語言如何處理多個 Channel 通道

golang logo

大家在初學 Go 語言時,肯定很少用到 Go Channel,也不太確定使用的時機點,其實在官方 Blog 有提供一篇不錯的文章『Go Concurrency Patterns: Pipelines and cancellation』,相信大家剛跨入學習新語言時,不會馬上看 Go Channel,底下我來用一個簡單的例子來說明如何使用 Go Channel,使用情境非常簡單,就是假設今天要同時處理 20 個背景工作,一定想到要使用 Goroutines,但是又想要收到這 20 個 JOB 處理的結果,並顯示在畫面上,如果其中一個 Job 失敗,就跳出 main 函式,當然又會希望這 20 個 JOB 預期在一分鐘內執行結束,如果超過一分鐘,也是一樣跳出 main 函式。針對這個問題,我們可以整理需要三個 Channel + 一個 Timeout 機制。

  • 使用 outChan 顯示各個 JOB 完成狀況
  • 使用 errChan 顯示 JOB 發生錯誤並且跳出 main 主程式
  • 使用 finishChan 通知全部 JOB 已經完成
  • 設定 Timeout 機制 (1 秒之內要完成所有 job)

在看此文章之前,也許可以先理解什麼是『buffer vs unbuffer channel』。

[Read More]