草庐IT

channel1

全部标签

go:如何将定向 channel 传递给接受双向 channel 的函数?

你好有一个函数接受chan[]byte(因为没有指定方向,我知道它是双向的)。该函数不发送或接收任何内容,仅出于统计相关目的查看channel中的元素数量。我想在具有以下签名的函数中调用此函数:funcfoo(fooChannelchan但是当我尝试使用参数调用另一个函数时,我得到了错误cannotusefooChannel(type.有什么方法可以将fooChannel转换为chan[]byte?由于我只对获取一些统计信息感兴趣,我应该如何为函数制作原型(prototype)以接受任何类型的channel(这样我什至可以摆脱“字节”部分)?我只使用len和cap以channel作为参

go - 关闭由 channel 链接的 goroutine 链的优雅方法是什么?

我是一名围棋学习者。为了更好地理解channel和goroutine的维护和供给,我正在尝试构建一个SieveofEratosthenes作为一组通过channel连接到管道中的goroutine。这是我目前所拥有的://esieveimplementsaSieveofEratosthenes//asaseriesofchannelsconnectedtogether//bygoroutinespackagemainimport"fmt"funcsieve(mineint,inchchanint){start:=true//First-numberswitchouch:=make(ch

戈朗 : Passing channels through empty interfaces

我正在尝试做一些看似微不足道的事情,直到我仔细阅读,现在看来它应该非常复杂。;-)我敲了一个测试模式来说明:http://play.golang.org/p/Re88vJZvPT在最基本的情况下,我试图拥有一个可以从channel读取数据并将其输出到另一个channel的功能。简单。只要您使用显示的推送器功能,测试就会执行此操作。然而,这样做的问题是,这样做对于我想要推送的每种类型的数据,我都需要一个不同的推送器函数。现在我过去用空接口(interface)做过类似的事情,因为推送代码中没有任何内容关心数据结构中的内容。我无法弄清楚的是,当我处理一个不受关注的数据结构的channel时

golang 中的递归在使用 goroutines、channels 和 sync.Waitgroup 时会产生死锁或负 WaitGroup 计数器

我正在尝试使用递归函数查找所有目录的列表。该函数的代码是funcFindDirs(dirstring,nativePartitions[]int64,wg*sync.WaitGroup,dirlistchanchanstring){//deferwg.Doneherewillgivenegativewaitgrouppanic,commentingitwillgivenegativewaitgroupcounterpanicfd,err:=os.Open(dir)iferr!=nil{panic(err)}filenames,err:=fd.Readdir(0)iferr!=nil{p

Golang channel 维护

我正在使用gochannels作为类似队列的机制,这非常适合我。我正在为每个用户打开这些类似队列的channel之一,并为这些channel中的每一个都有一个for-range循环。唯一的问题是我不会关闭任何这些channel。我想知道Go中是否习惯于在定时器上运行一个go-routine,该定时器基本上会破坏不活动的channel,几乎就像一个“智能”垃圾收集器。如有任何反馈,我们将不胜感激。谢谢。 最佳答案 为channel读写提供超时是一种常见的做法。这是一种安全措施,可确保goroutine在经过给定的时间间隔后停止阻塞。一

go - 将事物的 channel 作为 Go 中的接口(interface) channel 传递

我的程序有一个管道结构,我只是实现了一个缓存过滤器,如果已经处理过的数据版本在缓存中,它会直接将内容发送到输出。funcRun(inchandownloader.ReadyDownload)chanCCFile{out:=make(chanCCFile)processQueue:=make(chandownloader.ReadyDownload)gocache.BypassFilter(in,processQueue,out)//writesthecached,alreadyprocessedversiontooutifitexists//otherwiseredirectsthei

go - channel 只接受一次值 - golang

我刚刚开始使用go。这是我试图通过以下代码实现的目标。Main函数为searchAndLog()创建了5个线程。此函数接受一个channel,通过该channel它将接收到一个目录的路径,它将搜索一个名为“.DS_Store”的文件,然后用它做一些事情。main函数然后为"filepath.Walk()"创建另一个线程。该线程将遍历传递给它的目录,对于它遇到的每个目录(在walkFunc()中),它将执行select语句,将目录路径传递给5个线程之一。但是当我运行这个程序时,"filepath.Walk()"遇到的前五个目录将它传递给五个线程,但是一旦它把一个目录传递给每个线程一次,它

go - 我如何使用 channel 来知道循环启动的所有 goroutines 何时完成

我目前正在尝试range在map执行并发数据库请求而不是同步请求,显然是因为速度提升。我的问题是我有这样的事情:varmainthreads=make(chan*mainthread)varmainthreadsFetched=make(chanstruct{})forcontainerid:=rangecontainers{gofunc(){rows,err:=db.Query("SELECTthread_id,belongs_to,thread_name,access_levelFROMforum_mainthreadWHEREbelongs_to=?",containerid)d

go - 发送到 channel 的消息会丢失吗?

问题在标题中。假设我有几个goroutine(超过100个),所有这些goroutine最终都将数据发送到一个chan(将其命名为mychan:=make(chanint))另一个goroutine执行在无休止的for循环中可以吗,还是chan会丢失一些数据?我应该改用bufferedchan吗?或者我可能要创建一个chan和一个“恶魔”goroutine来为每个workergoroutine提取消息? 最佳答案 如果某些东西已成功发送到channel中,那么不会,它不会在正确的工作环境中丢失(我的意思是如果你正在篡改你的内存或者你

go - 在 channel 中选择

以下是选择的一个示例代码。不明白为什么第二个select不执行第一个case?输出似乎是:messages:=make(chanstring)signals:=make(chanbool)//Here'sanon-blockingreceive.Ifavalueis//availableon`messages`then`select`willtake//the`运行代码后,输出:nomessagereceivednomessagesentnoactivity更新:我知道为什么第二个选择现在变为默认值。第三个呢? 最佳答案 messa