WaitGroup 是 Go 中一種用於協調 goroutine 執行的同步機制。使用它可以確保主 goroutine 等待一組 goroutine 完成後再繼續執行。具體用法:建立 WaitGroup 實例,並為它設定一個初始計數器,表示要等待的 goroutine 數。對於每個要等待的 goroutine,呼叫 wg.Add(1) 來增加計數器。在 goroutine 完成後,呼叫 wg.Done() 來減少計數器。最後,主 goroutine 呼叫 wg.Wait() 來阻塞自身,直到所有 goroutine 都已完成。
如何使用WaitGroup 在Go 中等待Goroutine 完成
Go 中的WaitGroup
是一種同步機制,用於協調多個goroutine 的執行。它允許主 goroutine 等待一組 goroutine 完成,從而確保在繼續執行之前所有相關任務都已完成。
用法:
建立一個 WaitGroup
實例,並為其設定一個初始計數器,表示要等待的 goroutine 數。對於每個要等待的 goroutine,呼叫 wg.Add(1)
來增加計數器,並在 goroutine 完成後呼叫 wg.Done()
來減少計數器。最後,主 goroutine 呼叫 wg.Wait()
來阻塞自身,直到所有 goroutine 都已完成。
程式碼範例:
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待 3 个 goroutine 完成的 WaitGroup wg.Add(3) // 创建 3 个 goroutine for i := 0; i < 3; i++ { go func(i int) { fmt.Printf("Goroutine %d started\n", i) // 模拟一些需要时间的工作 for j := 0; j < 10000; j++ {} fmt.Printf("Goroutine %d finished\n", i) // 通知 WaitGroup 该 goroutine 已完成 wg.Done() }(i) } // 等待所有 goroutine 完成 wg.Wait() fmt.Println("All goroutines have finished") }
實戰案例:
此程式碼範例模擬了一個簡單的Web 伺服器,該伺服器會啟動多個goroutine 來處理請求。為了確保在關閉伺服器之前 goroutine 已完成,我們使用 WaitGroup
來等待所有 goroutine 完成。
package main import ( "fmt" "net/http" "sync" ) var wg sync.WaitGroup func main() { // 创建一个需要等待所有 HTTP 请求完成的 WaitGroup wg.Add(10) // 监听端口 8080 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World!") // 请求处理完毕后,通知 WaitGroup wg.Done() }) http.ListenAndServe(":8080", nil) // 等待所有 HTTP 请求完成 wg.Wait() fmt.Println("All HTTP requests have been processed") }
以上是golang函數如何透過WaitGroup等待goroutine完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Interfacesand -polymormormormormormingingoenhancecodereusanity和Maintainability.1)defineInterfaceSattherightabStractractionLevel.2)useInterInterFacesFordEffordExpentIndention.3)ProfileCodeTomeAgePerformancemacts。

initiTfunctioningOrunSautomation beforeTheMainFunctionToInitializePackages andSetUptheNvironment.it'susefulforsettingupglobalvariables,資源和performingOne-timesEtepaskSarpaskSacraskSacrastAscacrAssanyPackage.here'shere'shere'shere'shere'shodshowitworks:1)Itcanbebeusedinanananainapthecate,NotjustAckAckAptocakeo

接口組合在Go編程中通過將功能分解為小型、專注的接口來構建複雜抽象。 1)定義Reader、Writer和Closer接口。 2)通過組合這些接口創建如File和NetworkStream的複雜類型。 3)使用ProcessData函數展示如何處理這些組合接口。這種方法增強了代碼的靈活性、可測試性和可重用性,但需注意避免過度碎片化和組合複雜性。

initfunctionsingoareAutomationalCalledBeLedBeForeTheMainFunctionandAreuseFulforSetupButcomeWithChallenges.1)executiondorder:totiernitFunctionSrunIndIndefinitionorder,cancancapationSifsUsiseSiftheyDepplothother.2)測試:sterfunctionsmunctionsmunctionsMayInterfionsMayInterferfereWithTests,b

本文討論了GO中的數組和切片之間的差異,重點是尺寸,內存分配,功能傳遞和用法方案。陣列是固定尺寸的,分配的堆棧,而切片是動態的,通常是堆積的,並且更靈活。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具