草庐IT

Channel1

全部标签

go - 隐藏发送到函数调用后面的 channel 是否安全

我有一个名为Hub的结构用Run()在自己的goroutine中执行的方法。此方法按顺序处理传入的消息。消息从多个生产者(单独的goroutines)同时到达。当然,我使用channel来完成这个任务。但现在我想隐藏Hub在interface后面能够从其实现中进行选择。所以,使用channel作为一个简单的Hub的字段不合适。packagemainimport"fmt"import"time"typeHubstruct{msgschanstring}func(h*Hub)Run(){for{msg,hasMore:=所以我介绍了Hub.SendMsg(msgstring)只调用h.ms

go - 隐藏发送到函数调用后面的 channel 是否安全

我有一个名为Hub的结构用Run()在自己的goroutine中执行的方法。此方法按顺序处理传入的消息。消息从多个生产者(单独的goroutines)同时到达。当然,我使用channel来完成这个任务。但现在我想隐藏Hub在interface后面能够从其实现中进行选择。所以,使用channel作为一个简单的Hub的字段不合适。packagemainimport"fmt"import"time"typeHubstruct{msgschanstring}func(h*Hub)Run(){for{msg,hasMore:=所以我介绍了Hub.SendMsg(msgstring)只调用h.ms

go - 写入永远被阻塞的 channel

我陷入了一种奇怪的情况,即对channel的写操作从未发生过。packagemainimport("fmt""time")funcmain(){c:=make(chanint)s:=make(chanbool)k:=make(chanbool)fmt.Println("start")gofunc(){fmt.Println("routine1")s这是输出:startroutine1routine2beforeroutine3x=0afterbefore我想知道为什么写入channelk会阻塞,但从未打印日志语句fmt.Println("kready")。这是我的想法:go例程1将tr

go - 写入永远被阻塞的 channel

我陷入了一种奇怪的情况,即对channel的写操作从未发生过。packagemainimport("fmt""time")funcmain(){c:=make(chanint)s:=make(chanbool)k:=make(chanbool)fmt.Println("start")gofunc(){fmt.Println("routine1")s这是输出:startroutine1routine2beforeroutine3x=0afterbefore我想知道为什么写入channelk会阻塞,但从未打印日志语句fmt.Println("kready")。这是我的想法:go例程1将tr

go - 在 Go 中获取 channel 长度的正确方法

我使用Go已经有一段时间了,而且每天都在进步,但我本身并不是专家。目前我正在处理并发和goroutines因为我认为这是我的Go工具带中最后一个未知数。我想我已经掌握了它的窍门,但仍然绝对是一个初学者。我遇到问题的任务对我来说似乎很基本,但我没有尝试过。我想找出一种计算channel长度的方法。根据我收集到的信息,len()仅适用于缓冲channel,因此在这种情况下对我没有帮助。我正在做的是批量读取数据库中的值。我有一个像这样的生成器函数funcgen()chanResult{out:=make(chanResult)gofunc(){...querydbforrows.Next()

go - 在 Go 中获取 channel 长度的正确方法

我使用Go已经有一段时间了,而且每天都在进步,但我本身并不是专家。目前我正在处理并发和goroutines因为我认为这是我的Go工具带中最后一个未知数。我想我已经掌握了它的窍门,但仍然绝对是一个初学者。我遇到问题的任务对我来说似乎很基本,但我没有尝试过。我想找出一种计算channel长度的方法。根据我收集到的信息,len()仅适用于缓冲channel,因此在这种情况下对我没有帮助。我正在做的是批量读取数据库中的值。我有一个像这样的生成器函数funcgen()chanResult{out:=make(chanResult)gofunc(){...querydbforrows.Next()

接受 channel 接收器并将字符串发送到 channel 的 goroutine

我正在尝试制作一个goroutine循环,该循环采用接收字符串的channel,并且每次接收到它时都应该将值附加到另一个字符串。只有在所有goroutine结束时(goroutine计数应该是传入的list的长度),代码才会继续。我下面的示例似乎没有将strReceiverchannel的值附加到str上,因为str从未被修改。谁知道怎么回事?funcappendToStr(strstring,list[]string,origin*url.URL){varcurrProcint32=0;varmaxProcint32=int32(len(list))varstrReceiver:=m

接受 channel 接收器并将字符串发送到 channel 的 goroutine

我正在尝试制作一个goroutine循环,该循环采用接收字符串的channel,并且每次接收到它时都应该将值附加到另一个字符串。只有在所有goroutine结束时(goroutine计数应该是传入的list的长度),代码才会继续。我下面的示例似乎没有将strReceiverchannel的值附加到str上,因为str从未被修改。谁知道怎么回事?funcappendToStr(strstring,list[]string,origin*url.URL){varcurrProcint32=0;varmaxProcint32=int32(len(list))varstrReceiver:=m

go - 写入 channel 时从未调用 Defer

我正在尝试将写入channel作为goroutine函数中的最后一个操作。不幸的是,这不起作用。waitGroup永远不会完成。import("sync""github.com/SlyMarbo/rss""fmt")funcmain(){urls:=[]string{"http://rss.cnn.com/rss/edition.rss","http://rss.time.com/web/time/rss/top/index.xml"}varc=make(chanstring)varwgsync.WaitGroupfor_,url:=rangeurls{wg.Add(1)gorecei

go - 写入 channel 时从未调用 Defer

我正在尝试将写入channel作为goroutine函数中的最后一个操作。不幸的是,这不起作用。waitGroup永远不会完成。import("sync""github.com/SlyMarbo/rss""fmt")funcmain(){urls:=[]string{"http://rss.cnn.com/rss/edition.rss","http://rss.time.com/web/time/rss/top/index.xml"}varc=make(chanstring)varwgsync.WaitGroupfor_,url:=rangeurls{wg.Add(1)gorecei