草庐IT

phoenix-channels

全部标签

select - Go 中的 channel 阻塞是如何工作的?

我正在学习Go语言。这是我遇到的一个例子。有人可以解释这里发生了什么吗?packagemainimport"time"import"fmt"funcmain(){c1:=make(chanstring)c2:=make(chanstring)gofunc(){time.Sleep(time.Second*1)c1输出:DefaultDefaultProgramExited如果我注释掉默认部分//default://fmt.Println("Default")输出变成:receivedonereceivedtwoProgramexited.default案例的存在如何改变channel阻

javascript - GAE channel Api 与套接字

我有一个在服务器端使用GO并在客户端使用Javascript运行的Google应用程序。客户端每隔一定时间生成一个javascript对象(可以“字符串化”),需要将其发送回服务器并保存为json文件。根据谷歌应用引擎文档,这似乎可以通过两者来实现:channel接口(interface)套接字服务但我找不到这两个的任何示例,而且我也不清楚哪一个最能实现目标。谁能帮我?非常感谢。 最佳答案 也许这对某人有用,所以我是这样做的:saveData:functionsaveData(){var_this=this,save=this.sh

go - 处理来自单个 channel 的多个错误

关于错误处理,我在go例程和channel方面遇到了一些麻烦。首先,我有一个监听消息的函数(在无限循环中):funcmain(){messageChannel:=make(chanmessageHandler.MessageInfo)for{iftoken:=client.Subscribe("#",0,func(clientMQTT.Client,msgMQTT.Message){gomessageHandler.DecodeMessage(msg,messageChannel)select{casemessageInfo:=但在DecodeMessage函数中,可能会出现多个错误。

go - 在完成时将 channel 结果添加到队列的更惯用的方法

所以,现在,我只是传递一个指向Queue对象的指针(实现并不重要)并在goroutines的末尾调用queue.add(result)应该添加东西队列。我需要相同类型的功能——当然,就性能而言,与简单的队列添加函数调用相比,使用逗号ok语法进行循环检查完成是NotAcceptable。有没有更好的办法? 最佳答案 您的问题实际上有两个部分:如何在Go中排队数据,以及如何在不阻塞的情况下使用channel。对于第一部分,听起来您需要做的不是使用channel向队列添加内容,而是将channel用作队列。例如:var(ch=make(c

go - 在 golang 中声明指向 channel 的指针有什么影响吗?

typeStuff{chchanint}对比typeStuff{ch*chanint}我知道channel是引用类型,因此在由函数返回或作为参数返回时是可变的。什么时候channel地址在现实世界的程序中有用? 最佳答案 也许您的channel用于轮转日志,您想要轮转(交换)日志;交换channel(日志)指针而不是值。例如,packagemainimport"fmt"funcswapPtr(a,b*chanstring){*a,*b=*b,*a}funcswapVal(a,bchanstring){a,b=b,a}funcmain

testing - 如何测试 Golang channel /go-routines

我有一个包含一个字节数据的类型,并使用一个channel将新数据发布到那里。其他代码可以使用Read函数读取最后写入的数据字节。编辑:对于实际的可运行代码,请参阅https://github.com/ariejan/i6502/pull/3特别是文件acia6551.go和acia6551_test.go。测试结果可以在这里查看:https://travis-ci.org/ariejan/i6502/jobs/32862705我有以下内容://Emulatesaserialinterfacechipofsomekind.typeUnitstruct{//Channelusedforot

go - 通过 channel 和网络传递 map 、 slice ?

通过分布在网络上的channel传递slice和映射结构的最佳方式是什么?我需要分发在多个EC2实例上运行的应用程序,想知道如何通过Gochannel与每个应用程序通信来实现这一点。这是我想要运行的工作流:1.Processdatainoneapplication2.Distributethedatainto10replicaapplications3.Each10applicationdoesitsjobinaseparateEC2instance4.Oncetheyarealldone,theysendtheresultbacktotheoriginalprogram5.Thisi

c - 如果我尝试从 Channel 调用字符串数据,则会出现错误结果

我正在尝试编写一个程序,该程序应该从RSS链接中获取一堆数据(该部分有效),然后将其存储在GUI窗口中。但是,我的代码显示GUI窗口大约一毫秒,然后给我这个错误:panic:runtimeerror:indexoutofrangegoroutine1[running,lockedtothread]:main.(*modelHandler).CellValue(0xc0000e81b0,0xc0000760e0,0x0,0x0,0x8,0xc00004c380)C:/Users/Owner/go/src/FinalProject/GUI-BasedSystem.go:71+0x517gi

http - 在 http 处理程序中使用 goroutines 和 channel

我实现了一个非常简单的Twitter客户端阅读器:packagemainimport("encoding/json""fmt""io/ioutil""log""net/http""time")typetwitterResultstruct{Results[]struct{Textstring`json:"text"`Idsstring`json:"id_str"`Namestring`json:"from_user_name"`Usernamestring`json:"from_user"`UserIdstring`json:"from_user_id_str"`}}var(twitt

Go 例程以 for-loop 开始——一个还是多个 channel ?

我想使用从for循环调用的goroutine加载一些json文件(“.json”)。我想并行加载(在加载其他文件的同时处理第一个文件)。Q1。由于文件的数量可能会有所不同(要添加新文件),我会使用带有文件名的(文件)列表(仅在此示例中自动生成名称),因此我想使用for循环。最优?第二季度。什么是最有效的channel使用方式。第3季度。如果每个加载操作都需要一个唯一的channel(如下面的示例代码所示),我将如何定义channel?示例代码(要压缩并能够使用文件名列表加载文件):funcload_json(aChanchanbyte,sstring){//load"filename"