项目实战:使用Go WaitGroup提升Golang并发性能

655Z技术栈 Go编程 2025年08月10日 8

在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语言的并发性能。

提供PHP及ThinkPHP框架的定制开发、代码优化,PHP修改、ThinkPHP修改。

邮箱:yvsm@163.com 微信:yvsm316 QQ:316430983
关闭

用微信“扫一扫”