草庐IT

channel1

全部标签

go - 使用指向 channel 的指针

使用指向channel的指针是好的做法吗?例如,我同时读取数据并使用channel传递这些数据map[string]sting并在getSameValues()中处理此channel。funcgetSameValues(results*chanmap[string]string)[]string{vardatas=make([]map[string]string,len(*results))i:=0forvalues:=range*results{datas[i]=valuesi++}}我这样做的原因是因为chanmap[string]stringmap中将有大约数百万条数据,而且不止

Go:通过 channel 传递函数

我试图通过将调用的函数放入队列中以便稍后访问来限制调用的函数的速率。下面是我创建的一部分请求,requestHandler函数以特定速率处理每个请求。我希望它接受具有不同类型参数的各种函数,因此是interface{}类型。我怎样才能通过channel传递函数并成功调用它们?typerequeststruct{functioninterface{}channelchaninterface{}}varrequestQueue[]requestfuncpushQueue(finterface{},chchaninterface{}){req:=request{f,ch,}//pushreq

go - 为什么我的 Golang channel 写入永远阻塞?

在过去的几天里,我一直在尝试通过重构我的一个命令行实用程序来改变Golang的并发性,但我被卡住了。Here's原始代码(主分支)。Here's并发分支(x_concurrent分支)当我使用gorunjira_open_comment_emailer.go执行并发代码时,如果JIRA问题被添加到channelhere,deferwg.Done()永远不会执行,这导致我的wg.Wait()永远挂起。我的想法是,我有大量的JIRA问题,我想为每个问题分拆一个goroutine,看看它是否有我需要回复的评论。如果是这样,我想将它添加到某种结构(经过一些研究后我选择了一个channel),以

go - 封闭 channel 与零 channel

我正在使用Gochannel,我想知道关闭channel和将其设置为nil之间有什么区别?编辑:在此example,我想通过关闭channel或设置为零来断开发送者和接收者的连接。执行此操作的最佳做​​法是什么? 最佳答案 将channel变量设置为nil只是将变量设置为nil,同时保留它之前引用的已初始化channel。这与将任何其他变量设置为nil相同。如果该channel有其他引用,您仍然可以访问它。如果没有,它将被垃圾收集。此外,nil与关闭channel在写入或读取时的行为不同。来自DaveCheney的博客文章,Chan

multithreading - 如何在 Go 中使用 channel 发送方向

在Go中,可以指定channel可以发送的方向。我正在尝试创建一个关于它的示例,请查看以下代码:packagemainimport("fmt""time")funcmain(){ic_send_only:=make(编译错误#command-line-arguments.\send_receive.go:19:invalidoperation:ic_send_only如何以正确的方式使用channel方向?或者谁有比我更好的样本? 最佳答案 三个问题:您颠倒了发送和接收操作(这是您看到的错误)创建仅接收或仅发送channel毫无意义

go - 如何捕获 channel 死锁的异常?

我正在学习Go并致力于thislesson来自GoTours。这是我目前所拥有的。packagemainimport("fmt""code.google.com/p/go-tour/tree")//Walkwalksthetreetsendingallvalues//fromthetreetothechannelch.funcWalk(t*tree.Tree,chchanint){ift!=nil{Walk(t.Left,ch)ch如您所见,我尝试通过打印出我写入channel的值来测试我的Walk函数。但是,我收到以下错误。12345678910throw:allgoroutines

concurrency - Golang channel 选择语句

最近刚在尝试go。我想知道如果您有一个select语句等待几个channel上的通信,并且如果两个或多个channel同时收到一条消息,会发生什么情况。如果所有消息同时到达,select将如何确定接受哪个channel?谢谢! 最佳答案 来自thespec:Ifmultiplecasescanproceed,auniformpseudo-randomchoiceismadetodecidewhichsinglecommunicationwillexecute.所以选择是不确定的。 关于c

带 channel 的 Golang handlefunc

我想这个问题以前有人问过(而且可能不止一次)但是我找不到...我正在学习Go,我想通过向“处理程序”发送一个channel来扩展经典的Web服务器示例。我有这个标准的东西:funchello(whttp.ResponseWriter,r*http.Request){io.WriteString(w,"Helloworld!")}funcmain(){http.HandleFunc("/",hello)http.ListenAndServe(":8000",nil)}现在我希望“hello”函数能够在channel上写东西,供某人消费......我使用“普通”函数的方式是创建一个chan

go - 迭代 channel 发送的所有值,直到它在 Go 中关闭

我想了解goroutines和channel是如何工作的。我有一个向channel发送值的循环,我想遍历channel发送的所有值,直到它关闭。我在这里写了一个简单的例子:packagemainimport("fmt")funcpinger(cchanstring){fori:=0;i这给出了预期的结果,但我想知道是否有更短的方法。非常感谢您的帮助 最佳答案 您可以在channel上使用range。循环将继续,直到channel按照您的意愿关闭:packagemainimport("fmt")funcpinger(cchanstri

go - 如何显式清空 channel ?

简短版本:有没有办法清空一个gochannel而不重新创建它或循环它?原因:我正在使用两个channel来发送和接收数据,并且我有一个额外的channel来发出需要重新连接的信号。现在,当传输已重置/重新连接时,我想“清空”额外的channel以确保没有任何挥之不去的其他重置请求会导致再次重新连接。 最佳答案 没有循环就不可能清空channel。如果您没有任何并发​​接收器,那么您可以使用这个简单的循环:forlen(ch)>0{如果您确实有并发接收者,则使用循环:L:for{select{case