Go 函數中的高效並行任務處理:使用 go 關鍵字啟動並發例程。使用 sync.WaitGroup 計數未完成例程的數量。例程完成時呼叫 wg.Done() 遞減計數器。主程式使用 wg.Wait() 阻塞,直到所有例程完成。實戰案例:並發發送 Web 請求並收集回應。
Go 函數中的高效並行任務處理
Go 語言提供了強大的平行處理能力,使開發人員能夠輕鬆地創建並執行並發任務。本文將討論如何使用 Go 函數有效率地處理平行任務,並提供一個實戰案例來示範它的用法。
Go 函數中的並發
Go 函數提供了兩個關鍵字來支援並發執行:go
和sync.WaitGroup
。 go
關鍵字用於啟動並發的 Go 例程,而 sync.WaitGroup
用於等待所有例程完成。
等待群組
sync.WaitGroup
是一個計數器,用於追蹤未完成例程的數量。當例程完成時,它會呼叫 wg.Done()
來遞減計數器。主程式可以使用 wg.Wait()
方法來阻塞,直到所有例程完成。
實戰案例:並發 Web 請求
考慮一個場景,我們需要並發發送多個 Web 請求並收集回應。以下是示範如何使用Go 函數進行高效並發任務處理的程式碼:
package main import ( "fmt" "net/http" "sync" ) func main() { // 要发送的 Web 请求 URL urls := []string{"https://example.com", "https://example2.com", "https://example3.com"} // 创建等待组 var wg sync.WaitGroup for _, url := range urls { // 启动一个并发例程来发送 Web 请求 wg.Add(1) go func(url string) { // 发送 GET 请求 resp, err := http.Get(url) if err != nil { fmt.Printf("Error getting %s: %v\n", url, err) } else { fmt.Printf("Status code for %s: %d\n", url, resp.StatusCode) } // 例程完成,递减等待组计数 wg.Done() }(url) } // 等待所有例程完成 wg.Wait() }
在上面的程式碼中:
sync.WaitGroup
來追蹤未完成例程的數量。 wg.Done()
來表示它已完成。 wg.Wait()
阻斷,直到所有例程完成。 透過使用此方法,我們可以並發發送多個 Web 請求,並無需等待每個請求的回應即可繼續執行主程式。
以上是Golang 函數如何有效率地處理平行任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!