草庐IT

goroutine2

全部标签

concurrency - 如何处理 goroutine 中的错误?

我正在尝试同时运行多个任务并返回结果或错误。//datachannelsch:=make(chanint)ch2:=make(chanint)ch2:=make(chanint)//errorchannelserrCh:=make(chanerror)errCh2:=make(chanerror)errCh3:=make(chanerror)//functionsgotaskF(ch,errCh)gotaskF2(ch2,errCh2)gotaskF3(ch3,errCh3)然后我开始检查每个错误。如果有任何错误,我们打印它,否则我们打印每个任务的结果err:=然后如果没有错误我收集通

go - 循环时 goroutine 中的值不正确

我已通读CommonMistakes以及通过-race标志运行我的代码,但我似乎无法查明这里出了什么问题:packagemainimport("fmt")funcmain(){i:=1totalHashFields:=6fori(对于那些感兴趣的人,组合函数是组合algo)这是fmt.Println的一些输出:Outsidegoroutine:[014]Insidegoroutine:[555]Outsidegoroutine:[012345]Insidegoroutine:[555555]基本上,即使我将c作为参数传递给我的匿名go函数,该值始终与此范围之外的值不同。在上面的输出中,

go - 如何将数组处理分离到 goroutines 中?

我有一片30'000个字符串。我如何将这个slice处理成例如10个goroutine,这些goroutine从slice中提取3000个字符串,从中提取一些数据并插入一个新的slice?所以,最后,我将有10个slice,每个slice有3000个处理结果。处理这个问题的模式是什么?我看过thisarticle,但不确定这些模式中的哪一个适用于我的情况。 最佳答案 使用channel,从slice中读取元素,使用扇出来分配负载和传递消息。然后,在goroutine中处理字符串并将结果收集回(扇入)在单个goroutine中以避免互

node.js - 当您的处理程序函数退出时,aws-lambda 中的 goroutines 会发生什么?

问题源于:当响应已经发送时,我可以在后台做多少工作。例如:我只想接收数据,告诉客户端“ok”,然后继续进行一些可能需要一些时间的数据库操作。packagemainimport("fmt""context""github.com/aws/aws-lambda-go/lambda")typeMyEventstruct{Namestring`json:"name"`}funcHandleRequest(ctxcontext.Context,nameMyEvent)(string,error){goRecordQuery(name)returnfmt.Sprintf("Hello%s!",na

tcp - 不同 Goroutine 中的 ZeroMQ 上下文如何通信?

我正在使用thisasboilerplate,除了在同一个程序中我还有一些goroutines作为工作人员并连接到后端端点tcp://127.0.0.1:5560。我想做的是让它通过更有效的方式连接,例如ipc://、inproc://,甚至是unix套接字。我试过那些,但没有用。Channels是ZeroMQ的禁忌,对吗?那么如何在没有tcp的情况下将不同的goroutines连接到ZeroMQ上下文?有更好的选择吗?更新:代码://Simplemessagequeuingbroker//Sameasrequest-replybrokerbutusingQUEUEdevice////

go - 如何从goroutine的channel持续接收数据

我是Golang的初学者。我做了一个关于Gochannel的练习。我打开并从主goroutine中的文件读取数据,然后将数据传递给第二个goroutine以保存到另一个带有channel的文件。我的代码很流畅funcmain(){f,err:=os.OpenFile("test.go",os.O_RDONLY,0600)ch:=make(chan[]byte)buf:=make([]byte,10)bytes_len,err:=f.Read(buf)fmt.Println("ReadLen:",bytes_len)iferr!=nil{fmt.Println("Error:",err)

go - 停止 goroutine 中的所有递归函数

启动一个运行递归函数的goroutine,我想发送一个信号来停止那些递归函数。这是功能(功能不重要):funcRecursiveFunc(xint,depthint,quitchanbool)int{ifdepth==0{return1}ifquit!=nil{select{case0{total+=y}}returntotal}此功能可能需要很长时间才能完成,我想在发送退出信号后停止它并使用结果(无论它是什么)。运行它:import("fmt""time""sync")funcmain(){quit:=make(chanbool)wg:=&sync.WaitGroup{}result

asynchronous - 当我在 goroutine 中运行 wg.Wait() 时,为什么我的代码可以正常工作?

我有一个要抓取的网址列表。我想做的是将所有成功抓取的页面数据存储到一个channel中,当我完成后,将其转储到一个slice中。我不知道我会得到多少成功的抓取,所以我不能指定一个固定的长度。我希望代码到达wg.Wait()然后等到所有wg.Done()方法被调用,但我从未到达close(队列)语句。寻找类似的答案,我遇到了这个SOanswerhttps://stackoverflow.com/a/31573574/5721702作者做了类似的事情:ports:=make(chanstring)toScan:=make(chanint)varwgsync.WaitGroup//make1

multithreading - 使用 Goroutine 实际上需要更长的时间来执行

我确定我做错了什么,我有一个Go程序可以解析OBJ格式的3D模型并输出一个json对象。当我在不添加goroutine的情况下运行它时,我得到以下输出:$gorunobjParser.goak47.objextincteur_obj.obj--Creatingak47.json3dfromak47.obj--Exported85772faceswith89088verticies--Creatingextincteur_obj.json3dfromextincteur_obj.obj--Exported150316faceswith151425verticiesParsed2files

windows - 在 Windows 上,是否可以以不同的用户身份运行单个 goroutine?

如何将goroutine的运行委托(delegate)给Windows上的另一个非管理员帐户?我看到您可以使用syscall.Setuid()在Linux上执行此操作。我看不到如何使用Windows系统调用包在Windows上执行此操作。我希望能够在程序运行时设置goroutine运行的帐户。这可能吗?背景知识:-我想切换运行goroutine的用户,这样当我使用go-oci8时,我可以更改在数据库连接期间传递给Oracle的操作系统用户(参见我的其他question).我需要连接到数据库,它使用登录用户(OS用户)作为安全的一部分。在java中,我可以在连接设置期间更改环境变量(或者