草庐IT

channel1

全部标签

go - 如何知道缓冲 channel 已满

如何知道缓冲channel已满?不知道缓冲channel满时会被阻塞,而是选择丢弃发送到缓冲channel的项目。 最佳答案 您可以使用selectstatement有一个默认值。如果无法执行任何情况,例如发送到完整channel,则该语句将执行默认操作:packagemainimport"fmt"funcmain(){ch:=make(chanint,1)//Fillitupch输出:Channelfull.DiscardingvaluePlayground:http://play.golang.org/p/1QOLbj2Kz2检

go - Go 中的单向 channel 有什么意义?

我正在学习Go,到目前为止,我对它印象深刻。我已经阅读了golang.org上的所有在线文档,并且正在阅读Chrisnall的“TheGoProgrammingLanguagePhrasebook”。我了解了channel的概念,并认为它们将非常有用。但是,我一定错过了一些重要的事情,因为我看不到单向channel的意义。如果我对它们的解释正确,只读channel只能在其上接收,而只写channel只能在其上传输,那么为什么要有一个您可以发送但从不接收的channel呢?它们可以从一个“方向”转换到另一个“方向”吗?如果是这样,那么,如果没有实际约束,那又有什么意义呢?它们只不过是对客

go - 如何在不阅读的情况下检查 channel 是否关闭?

这是由@Jimt编写的Go中工作人员和Controller模式的一个很好的示例,以回答"Istheresomeelegantwaytopause&resumeanyothergoroutineingolang?"packagemainimport("fmt""runtime""sync""time")//Possibleworkerstates.const(Stopped=0Paused=1Running=2)//Maximumnumberofworkers.constWorkerCount=1000funcmain(){//Launchworkers.varwgsync.WaitGr

go - Go channel 是如何实现的?

在(简要地)回顾了Go语言规范、有效的Go和Go内存模型之后,我仍然有点不清楚Gochannel是如何工作的。它们是什么样的结构?它们的行为有点像线程安全队列/array。它们的实现是否依赖于架构? 最佳答案 channel的源文件(来自您的go源代码根目录)位于/src/pkg/runtime/chan.go.hchan是channel的中心数据结构,带有发送和接收链表(保存指向它们的goroutine和数据元素的指针)和closed标志。在runtime2.go中定义了一个Lock嵌入式结构,根据操作系统用作互斥体(futex)

go - 多个 goroutine 在一个 channel 上监听

我有多个goroutines试图同时在同一个channel上接收。似乎最后一个开始在channel上接收的goroutine获得了值。这是语言规范中的某个地方还是未定义的行为?c:=make(chanstring)fori:=0;i输出:goroutine4ExampleOnPlayground编辑:我刚刚意识到这比我想象的要复杂。消息在所有goroutine中传递。c:=make(chanstring)fori:=0;i输出:original,hifrom0,hifrom1,hifrom2,hifrom3,hifrom4注意:上述输出在最新版本的Go中已经过时(见评论)Example

go - channel 中的元素数

使用缓冲channel,如何测量channel中有多少元素?例如,我正在这样的channel上创建和发送:send_ch:=make(chan[]byte,100)//codesend_ch我想测量channelsend_ch中有多少msgs。我知道,由于并发性,测量不会准确,因为在测量和操作之间可能会发生抢占(例如,在此视频中讨论GoogleI/O2012-GoConcurrencyPatterns)。我将使用它来控制生产者和消费者之间的流量,即,一旦我通过了高水位线,就会改变一些行为,直到我通过低水位线。 最佳答案 http:/

go - 怎么听N个 channel ? (动态选择语句)

要开始执行两个goroutine的无限循环,我可以使用以下代码:在收到msg后,它将启动一个新的goroutine并永远继续下去。c1:=make(chanstring)c2:=make(chanstring)goDoStuff(c1,5)goDoStuff(c2,2)for;true;{select{casemsg1:=我现在希望N个goroutine具有相同的行为,但在这种情况下select语句会如何?这是我开始的代码位,但我对如何编写select语句感到困惑numChans:=2//Ikeepthechannelsinthisslice,andwantto"loop"overth

go - 可以让 channel 保持打开状态吗?

如果我从不检查其状态,是否可以让Gochannel永远打开(永远不要关闭channel)?会不会导致内存泄露?下面的代码可以吗?func(requestChchan 最佳答案 可以让Gochannel永远打开并且永远不要关闭它。当channel不再使用时,将被垃圾回收。Notethatitisonlynecessarytocloseachannelifthereceiverislookingforaclose.Closingthechannelisacontrolsignalonthechannelindicatingthatnom

php - 如何在 2015 年 4 月 20 日之后获取 Youtube channel RSS 提要(没有 v3 API)?

现在APIv2已经消失,如果没有v3API,有什么方法可以获取channel的简单RSS提要?如果目标是提要阅读器,我愿意接受YahooPipes或任何比为v3API创建应用程序更简单的解决方法。我只需要一个RSS提要。直到现在它才公开可用,现在可以随时停止(我认为)。那么,为什么不再允许在没有APIkey的情况下访问它。 最佳答案 在RSS阅读器部分https://support.google.com/youtube/answer/6098135?hl=en可以选择将您的订阅导出到OPML文件。然后,查看OPML的内容可以提取提要

ios - Jenkins - xcodebuild 连接对等方拒绝拒绝 dtxproxy :XCTestManager_IDEInterface 的 channel 请求

我正在尝试使用Jenkins运行xcodebuild命令来定期构建我的代码。Jenkins吐出的错误信息是:14:18:25.993xcodebuild[24225:349241]Connectionpeerrefusedchannelrequestfor"dtxproxy:XCTestManager_IDEInterface:XCTestManager_DaemonConnectionInterface";channelcanceled14:18:25Testingfailed:14:18:25TesttargetPROJECT_NAMEencounteredanerror(Inva