草庐IT

channel1

全部标签

go - 检查 channel 的值(value)

我有两个只读channel用作发电机。typeEventstruct{timeint}我可以将它们的值读作:for{select{case我将这些channel用于事件驱动模拟,因此我必须选择Event用少timefield。是否可以检查每个channel的值,然后才选择从哪个channel读取?因为操作从channel中获取值(value),并且不可能将其推回(只读channel)。 最佳答案 您可以实现您的版本的gochannel结构。例如下面的实现就像没有大小限制的gochannel一样,你可以检查它的第一个元素。packag

Golang channel 睡着了

我是golangchannel的新手,无法低估为什么如果我指定channel缓冲区大小程序行为会发生变化packagemainimport("fmt")funcchannels(in10{fmt.Println("Sendclose")in输出是:OutOut11OutOut11OutOut11OutOut11OutOut11OutOut1Sendclosefatalerror:allgoroutinesareasleep-deadlock!goroutine1[chansend]:main.main()/home/user/go-lessons/3/chan_4.go:39+0x2c

go - 将 channel 参数传递给 golang 中的动态加载函数

我是golang和golang插件的新手。我无法将chan对象传递给此函数。如果我切换到int它会起作用。不确定我到底错过了什么。感谢您的帮助。dataunit.gopackagemaintypeDataUnitstruct{iintsstring}modcounter.gopackagemainimport("fmt"//"strconv")typemodulestring//func(mmodule)RunMod(iint){func(mmodule)RunMod(inmodmain.gopackagemainimport("fmt""os""plugin")typeDataUni

Golang 多 channel 写/接收排序

我的具体问题是我有一个无缓冲的channel,并且正在生成多个与信号量绑定(bind)的goroutines来执行工作:funcmain(){sem:=make(chanstruct{},10)//allowtenconcurrentparserswg:=&sync.WaitGroup{}wg.Add(1)DoSomething("http://example.com",sem,wg)wg.Wait()//alldone}funcDoSomething(ustring,semchanstruct{},wg*sync.WaitGroup){deferwg.Done()sem如果堆栈上有多

go - channel 以裸返回方式返回时为零

我花了相当多的时间来尝试调试为什么我的channel不接受任何内容。我设法将问题定位为与命名返回值的范围相关的问题,当它们以裸返回的形式返回时。下面的代码显示了问题。packagemainimport("log""sync")varreceiverchanintfuncSetup()(receiverchanint){receiver=make(chanint)return}//funcSetup()(chanint){//receiver=make(chanint)//returnreceiver//}funcLaunch(jint){fori:=0;i运行这段代码会产生下一个错误f

go - 信号 goroutines 在 channel 关闭时停止

我有多个从两个channel选择的goroutines:一个channel提供数据,一个channel用于信号(一种完成/退出channel)。我使用信号channel来捕获信号(杀死)并优雅地关闭goroutine。我从packagea运行“worker”协程,而捕获信号的goroutinefunc从packageb运行。我使用来自https://gist.github.com/reiki4040/be3705f307d3cd136e85的信号包.packageaimport"sync"WorkChan:=make(chanint)QuitChan:=make(chanstruct{

concurrency - 使select语句同时等待多个 channel

引用自TheGoProgrammingLanguageSpecification:A"select"statementchooseswhichofasetofpossiblecommunicationswillproceed.Itlookssimilartoa"switch"statementbutwiththecasesallreferringtocommunicationoperations.如何在case子句中等待多个channel,以便仅当两个channel都返回时才执行case?示例:select{case 最佳答案 没有

使用 channel 进行管道

我正在探索Go并尝试使用channel建立一种管道。我只想在main()中读取一些内容并将它们发送到process()进行处理,在这种情况下,只需将值打印到屏幕上即可。不幸的是,在下面的代码中,process()似乎从来没有从channel中读取过,或者至少它没有打印任何东西;我做错了什么?packagemainimport("fmt";"database/sql";_"github.com/lib/pq";"time";"gopkg.in/redis.v3")//;"strconv")typeRecordstruct{userId,myDateintprodUrlstring}fun

go - 具有 WaitGroup 和无缓冲 channel 的竞争条件

在这篇文章中得到我最初问题的(正确)解决方案后Understandinggolangchannels:deadlock,我想出了一个稍微不同的解决方案(在我看来读起来更好://Binaryhistogramcountstheoccurencesofeachword.packagemainimport("fmt""strings""sync")vardata=[]string{"Theyellowfishswimsslowlyinthewater","Thebrowndogbarksloudlyafteradrink...","Thedarkbirdbirdofpreylandsonas

database - 使用 channel 进行并发数据库调用是好的设计吗?

我正在开发一个带有统计页面的网络应用程序(用go编写)。此页面包含多个图表,这些图表使用数据库中的数据进行备份。现在按顺序对数据库进行了多次调用。这是使用channel以并行调用数据库并可能提高性能的好地方吗?无论性能提升如何-在这种情况下使用channel是否被认为是好的设计? 最佳答案 channel本身并不能提高绩效。事实上,channel操作比函数调用要昂贵得多。您应该问自己的是“我应该对数据库进行并发调用吗?”。如果答案是"is",那么您的下一步应该是决定如何构建您的数据库客户端代码以启用它。goroutines肯定会有功