jjzjj

Cross-Channel

全部标签

go - 缓冲/非缓冲 channel 和死锁

为了学习,我使用这段代码来玩goroutines。我无法得到不同的东西:packagemainimport("fmt""time")funcmain(){ch1:=make(chanstring)//ch2:=make(chanstring)//gotest(ch1,ch2)ch1ch2fmt.Scanln()}functest(ch1chanstring,ch2chanstring){timeout:=time.After(time.Second*2)//deferfunc(){fmt.Println("returning")}()for{select{cases:=如果我按原样运行

csv - 我如何在 golang 中覆盖未知类型的 channel

我有一个函数,它接收一个字符串,并基于它创建一个基于字符串值的类型的channel。然后发送该channel以在另一个线程中填充。在这个函数中,我然后想要范围填充的值并使用它们。但是,我收到一个错误:“无法覆盖myChan(类型接口(interface){})”这是我的代码示例:funcmyFunc(inputstring){varmyChaninterface{}switchinput{case"one":myChan=make(chanOne)case"two":myChan=make(chanTwo)}godoStuff(&myChan)for_,item:=rangemyCha

go - 动态创建 channel 以用作 Go 中可变参数函数的参数

是否可以在Go中动态创建一个channel,然后给它赋值?此扇出扇入代码适用于f1:=factorial(in)f2:=factorial(in)forn:=rangemerge(f1,f2){fmt.Println(n)}但我想做类似的事情varres[2]这给出了以下错误$gorunmain.go#command-line-arguments.\main.go:26:cannotuseres(type[2]这里是完整的代码...packagemainimport("fmt""sync")funcmain(){in:=gen()f1:=factorial(in)//codetober

go - 如何在匿名函数中逐行扫描文件并将其传递到 channel

我想编写一个函数,从文件中读取行,然后将其发送到channel以进行进一步处理。我是Go的新手,这里是我根据教科书示例想出的阅读器功能:funcreader(filestring)在main()函数中,我将文件指针传递给读取器函数,并尝试按如下方式排出输出channel:funcmain(){out:=reader(*f)forrangeout{fmt.Println(我没有收到编译或运行时错误,但是输出为空。如果我不将for循环放入goroutine中,我可以使用reader()函数打印文件而不会出现任何问题。我还尝试将reader()函数中的扫描器、channel或两者传递给匿名函

go - 关闭一个 Go channel ,并同步一个 Go 例程

我无法在go中终止我的WaitGroup,因此无法退出范围循环。谁能告诉我为什么。或者更好的方法来限制go例程的数量,同时仍然能够在chan关闭时退出!我见过的大多数示例都与静态类型的channel长度有关,但此channel会因其他进程而动态调整大小。示例中的打印语句(“DONE!”)显示testValProducer打印了正确的次数,但代码从未到达(“--EXIT--”),这意味着wg.Wait仍然以某种方式阻塞.typeTestValContainerchanstringfuncStartFunc(){testValContainer:=make(TestValContainer

go - 在 go channel 上选择内部范围

我正在关注thispost并行化我的应用程序。我需要定制这段代码:funcsq(done我不完全理解caseout这行.我可以看到它说如果n有一个值,然后将其平方并发送到channel中,但我不明白为什么。是否select只拿第一个true案件?是否可以改写:forn:=rangein{select{casen:out无论如何,我需要替换行caseout通过函数调用。我已将其更改为以下内容:out:=make(chanstructs.Ticket)gofunc(){deferclose(out)forurl:=rangeinputChannel{select{caseurl:data,

for-loop - 带缓冲 channel 的循环

我正在尝试使用Gochannel并遇到以下简单程序未终止的问题。本质上,我想发出一些异步HTTP获取请求,然后等待,直到它们全部完成。我正在使用缓冲channel,但我不确定这是惯用的方式。funcGetPrice(quoteschanstring){client:=&http.Client{}req,_:=http.NewRequest("GET","https://some/api",nil)req.Header.Set("Accept","application/json")res,err:=client.Do(req)iferr!=nil{panic(err)}deferres

go - 这是在 go 中使用 channel 的正确方法吗?

在这里,我尝试遍历res并为每个项目启动一个goroutine。在每个goroutine中,我再次在缓冲channel中启动3个goroutine。运行此代码会阻止完成并且不允许程序完成。func(aui*AssignmentUtilImpl)MapAssignmentSubmissionData(res[]AssignmentSubmissionNode)[]AssignmentSubmission{ifres==nil{returnnil}submissions:=[]AssignmentSubmission{}ch:=make(chanstring,len(res))//mapd

在 go 中使用 channel 返回值测试发射器函数

我很难对我的发射器函数进行测试,该函数通过数据管道的channel传递结果。此功能将定期触发并从数据库中提取记录。我为这个问题编译了一个精简的完成版本,真正的代码会更复杂,但会遵循相同的模式。为了进行测试,我模拟了对数据库的访问,因为我想测试Emitter函数的行为。我想代码不仅仅是文字:这是我要测试的方法://EmittRecordpullrecordfromdatabasefuncEmittRecord(svcService,countint)我有几个带有接口(interface)的类型://RecordisaRecordfromdbtypeRecordstruct{Field1s

与卡夫卡消费者一起去 channel

我刚开始学习channel。我正在使用汇合的kafka消费者来创建功能性消费者。我想要完成的是将消息发送到缓冲channel(2,000)...然后使用管道将channel中的消息写入redis。我已经通过执行println来让消费者部分工作了一条一条地发送消息,直到它到达偏移量的末尾,但是当我尝试添加一个channel时,它似乎命中了default:switch中的案例然后就卡住了。我似乎也没有正确填写channel?这fmt.Println("countis:",len(redisChnl))总是打印0这是我目前所拥有的://Examplefunction-basedhigh-le