langShift

Channel 和 Select 深入

Channel 和 select 語句是 Go 並發模型的核心。雖然前面的模組涵蓋了基礎知識,但本模組探索了使 Go 並發模型如此強大和富有表現力的高級模式和技巧。

Channel 方向性

Go channel 可以是定向的,允許你指定 channel 是用於發送、接收還是兩者兼有。這提供了編譯時安全性,並使程式碼意圖更清晰。

正在加载...

高級 Select 模式

帶 Default 的 Select

select 中的 default 分支允許非阻塞的 channel 操作:

正在加载...

帶超時的 Select

使用 selecttime.After 提供超時功能:

正在加载...

Channel 模式

Fan-Out 模式

Fan-out 模式將工作從一個 channel 分發到多個工作線程:

正在加载...

Fan-In 模式

Fan-in 模式將多個 channels 合併為一個:

正在加载...

Channel 組合

帶錯誤處理的管道

構建具有錯誤處理的健壯管道:

正在加载...

Context 和取消

使用 context 和 channels 進行取消:

正在加载...

Channel 最佳實踐

1. 始終由發送者關閉 Channel

正在加载...

2. 避免 Channel 洩漏

正在加载...

練習題:

  1. 只發送 channel 和只接收 channel 有什麼區別?
  2. select 中的 default 分支如何實現非阻塞操作?
  3. 解釋 fan-out 和 fan-in 模式以及何時使用每種模式。
  4. 如何使用 channels 和 select 實現超時功能?
  5. 關閉 channels 和防止洩漏有哪些最佳實踐?

專案想法:

創建一個使用 channels 將傳入請求分發到多個工作 goroutine 的負載均衡器。負載均衡器應該實現健康檢查、優雅關閉和請求超時處理,使用本模組中學到的模式。