iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
自我挑戰組

Concurrency in go 讀書心得系列 第 11

11.For-Select-Loop

  • 分享至 

  • xImage
  •  

這是出現頻率非常高的一種模式,主要用於持續地從多個 Go 通道(channels)中接收數據,此結構組合了 for 循環和 select 語句,讓你可以在一個無限循環中等待多個通道上的操作。

for 循環:確保 select 語句持續地執行,除非你主動終止它(例如,通過 break)。
select 語句:允許你等待多個通道操作。當某個通道可以執行讀取或寫入時,它會執行該操作。

package main

import (
	"fmt"
	"time"
)

func main() {
	ch1 := make(chan string)
	ch2 := make(chan string)

	go func() {
		for {
			ch1 <- "Message from channel 1"
			time.Sleep(2 * time.Second)
		}
	}()

	go func() {
		for {
			ch2 <- "Message from channel 2"
			time.Sleep(3 * time.Second)
		}
	}()

	for {
		select {
		case msg1 := <-ch1:
			fmt.Println(msg1)
		case msg2 := <-ch2:
			fmt.Println(msg2)
		}
	}
}

在上面的例子中,我們有兩個 goroutine 向兩個不同的通道 ch1 和 ch2 發送數據。在主要的 for-select 循環中,程序會等待這兩個通道上的數據。當其中一個通道有可用的數據時,它會從該通道讀取數據並處理它。

總之,for-select 循環是一個非常有用的工具,特別是當你處理多個通道和並行操作時。這使得你可以在一個集中的位置等待和處理多個通道的數據。


上一篇
10.Confinement pattern
下一篇
12.Preventing goroutine leaks
系列文
Concurrency in go 讀書心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言