登录
首页 >  Golang >  Go问答

将 sync.WaitGroup 与外部函数一起使用的最佳方式

来源:Golang技术栈

时间:2023-04-30 20:09:22 469浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《将 sync.WaitGroup 与外部函数一起使用的最佳方式》,本文主要会讲到golang等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我对以下代码有一些问题:

package main

import (
"fmt"
"sync"
)
// This program should go to 11, but sometimes it only prints 1 to 10.
func main() {
    ch := make(chan int)
    var wg sync.WaitGroup
    wg.Add(2)
    go Print(ch, wg) //
    go func(){

        for i := 1; i 

我在指定的地方陷入僵局。我尝试过设置wg.Add(1)而不是 2,它解决了我的问题。我的信念是我没有成功地将通道作为参数发送给Printer函数。有没有办法做到这一点?否则,我的问题的解决方案是将go Print(ch, wg)行替换为:

go func() {
Print(ch)
defer wg.Done()
}

并将Printer功能更改为:

func Print(ch 

什么是最好的解决方案?

正确答案

好吧,首先你的实际错误是你给Print方法一个副本sync.WaitGroup,所以它不会调用Done()你正在使用的方法Wait()

试试这个:

package main

import (
    "fmt"
    "sync"
)

func main() {    
    ch := make(chan int)

    var wg sync.WaitGroup
    wg.Add(2)    

    go Print(ch, &wg)

    go func() {  
        for i := 1; i 

现在,更改您的Print方法以删除WaitGroup它通常是一个好主意:该方法不需要知道有什么东西在等待它完成它的工作。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>