在Go語言中,我們可以使用sync.WaitGroup
來提升并發性能。sync.WaitGroup
是一個計數信號量,它可以用來等待一組goroutine的完成。
以下是一個使用sync.WaitGroup
的實例,來同時下載多個網頁的內容:
package main
import (
"fmt"
"net/http"
"sync"
)
func main() {
urls := []string{
"https://www.google.com",
"https://www.baidu.com",
"https://www.github.com",
}
var wg sync.WaitGroup
wg.Add(len(urls))
for _, url := range urls {
go func(url string) {
defer wg.Done()
resp, err := http.Get(url)
if err != nil {
fmt.Printf("Failed to download %s: %s\n", url, err)
return
}
defer resp.Body.Close()
fmt.Printf("Downloaded %s\n", url)
}(url)
}
wg.Wait()
}
在上面的示例中,我們首先創建了一個sync.WaitGroup
,并且使用了wg.Add(len(urls))
來設置計數器的初始值。然后,我們使用一個循環創建了多個goroutine來下載網頁內容。在每個goroutine中,我們使用defer wg.Done()
來通知sync.WaitGroup
計數器減一。最后,我們調用wg.Wait()
來等待所有的goroutine完成。
通過使用sync.WaitGroup
,我們能夠確保所有的goroutine都已經完成,然后再繼續執行后面的邏輯。這樣可以提升并發性能,因為我們可以同時下載多個網頁的內容,而不需要等待每個網頁都下載完成后才能繼續下載下一個網頁的內容。
總之,使用sync.WaitGroup
可以幫助我們更好地管理并發任務,提升Go語言的并發性能。