草庐IT

routines

全部标签

go - 在函数中初始化 channel 导致 go routine 死锁

我是Go的新手,所以我确定这是我所缺少的简单内容。我正在尝试初始化一个channel以从另一个函数捕获用户输入。我尝试了以下方法:packageinputconstUP=1constRIGHT=2constDOWN=3constLEFT=4varinputChannelchaninttypeInputReaderinterface{ReadNextInt()int}funcInitInputChannel()chanint{inputChannel:=make(chanint,1)returninputChannel}funcSendInput(inputReaderInputRead

go - 通过 channel 将值发送到多个 go routines

我想在channel中发送一个值以从主函数执行例程。发生的事情是哪个goroutine将首先从channel接收值。packagemainimport("fmt""math/rand"//"runtime""strconv""time")funcmain(){varchchanintch=make(chanint)ch我当前的实现出现错误。fatalerror:allgoroutinesareasleep-deadlock!我怎么知道哪个goroutine会先从channel接收到值。如果其他go例程会运行或抛出错误,那么其他例程会发生什么,因为没有接收值的channel。因为其中一个

Go routine with channel 死锁

我刚开始学习Go,所以请耐心等待,我尝试使用Go例程和channel,但不知何故遇到了僵局。举个例子packagemainimport("fmt""sync")funcmain(){total:=2varwgsync.WaitGroupwg.Add(total)ch:=make(chanint)foridx:=0;idx抛出错误Processingidx0Processingidx110fatalerror:allgoroutinesareasleep-deadlock! 最佳答案 rangech从channel读取直到它关闭。你调

multithreading - 如何在go中转换以下Thread语句

我正在尝试在go中转换以下线程的java语句;intnum=5;Thread[]threads=newThread[5];for(inti=0;i我想知道,如何将其转换为go?谢谢 最佳答案 Golang使用了一个叫做"goroutines"的概念(灵感来自"coroutines")而不是许多其他语言使用的“线程”。您的具体示例看起来像是sync.WaitGroup的常见用法输入:wg:=sync.WaitGroup{}fori:=0;i请注意,示例中的SomeFunction(...)可以是任何类型的工作,并将与所有其他调用同时执

go - 为什么在go routine中关闭channel会导致receiving channel收到值?

我有一个go例程,它会定期轮询每个时间间隔并执行操作。它还检查完成channel,作为结束信号,以停止轮询。gofunc(){for{select{case我意识到如果我关闭channel,它也会运行,就好像值被传递给donechannel一样,它打印出“我完成了”为什么会这样? 最佳答案 来自规范:Areceiveoperationonaclosedchannelcanalwaysproceedimmediately,yieldingtheelementtype'szerovalueafteranypreviouslysentva

go - 所有 go routines 都睡着了 - 死锁

我不明白为什么这段代码会出现死锁。我已经尝试了几种不同的方法来阻止死锁(使用WorkGroup的几个不同版本)。这是我在Go的第一天,到目前为止,我对相当简单和直接的操作的复杂性感到非常失望。我觉得我遗漏了一些大而明显的东西,但我在这方面找到的所有文档似乎与对我来说非常基本的操作模式截然不同。所有文档都使用channel的原始类型(int、字符串)而不是更复杂的类型,所有这些都具有非常基本的for循环,或者它们位于范围的另一端,其中函数是相当复杂的编排。我想我真的在寻找goroutines的“这通常是如何完成的”的中间示例。packagemainimport"fmt"//import"

go - 所有 go routines 都睡着了 - 死锁

我不明白为什么这段代码会出现死锁。我已经尝试了几种不同的方法来阻止死锁(使用WorkGroup的几个不同版本)。这是我在Go的第一天,到目前为止,我对相当简单和直接的操作的复杂性感到非常失望。我觉得我遗漏了一些大而明显的东西,但我在这方面找到的所有文档似乎与对我来说非常基本的操作模式截然不同。所有文档都使用channel的原始类型(int、字符串)而不是更复杂的类型,所有这些都具有非常基本的for循环,或者它们位于范围的另一端,其中函数是相当复杂的编排。我想我真的在寻找goroutines的“这通常是如何完成的”的中间示例。packagemainimport"fmt"//import"

go - 如何恢复循环中调用的多个go例程的输入

我有一个循环抛出多个go例程,它们调用一个函数来生成httpget请求并计算和对象。我想恢复所有这些例程的结果。我尝试使用channel,但是它们是空的,即使我强制等待所有例程完成也是如此。这是启动例程的代码:funcmain(){pairs:=getPairs()//Returnsanarrayofstringsc:=make(chanresult)for_,product:=rangepairs{gogetScore(product.Symbol,1,c)}fmt.Println(len(c))time.Sleep(5000*time.Millisecond)fmt.Println

go - 在 Go Routines 中迭代映射?

我在前一段时间编写的一些旧代码上看到一些“fatalerror:并发map迭代和map写入”。我一直在尝试诊断问题,但遇到了类似于下面playground链接的代码块。在我看来迭代返回的映射(通过引用传递)是错误的,即使它是在带锁的函数中返回的。我正在寻找关于为什么这似乎没有引发上述错误的解释。我知道现在有RWMutex和同步映射,但这段代码是前一段时间写的,我正在寻找功能的解释而不是改进。https://play.golang.org/p/_RY-QAyGE2W我假设上面的代码会抛出“fatalerror:并发map迭代和map写入”,但它似乎没有任何问题。

go - 尝试使用 go routines 时无法抓取数据

我正在尝试为我正在使用BFS的给定词抓取相关词,从给定词开始并在dictionary.com上搜索每个相关词我已经在没有并发的情况下尝试过这段代码,它工作得很好,但需要很多时间,因此尝试使用goroutines但我的代码在第一次迭代后卡住了。第一级BFS工作正常,但在第二级它挂起!packagemainimport("fmt""github.com/gocolly/colly""sync")varwgsync.WaitGroupfuncbuildURL(wordstring)string{return"https://www.dictionary.com/browse/"+string