我正试着在戈鲁廷做一个“如果”的声明。问:如何从10中得到10?
var jr = make(chan int, 10)
var clients = 10 // The number of clients varies with time.
func rpcMethod(num int) {
time.Sleep(time.Duration(rand.Intn(int(time.Second))))
jr <- num
}
func postHandler(num int) {
// wait RPC data
for {
select {
case msg := <-jr:
{
if msg == num {
fmt.Println(num, "hello from", msg)
return
}
}
}
}
}
func main() {
for i := 0; i < clients; i++ {
go postHandler(i)
go rpcMethod(i)
}
fmt.Scanln()
}结果2/10
发布于 2016-04-13 13:03:53
好的,有很多问题。
首先也是最重要的是,它不能工作,因为当从一个通道读取某物时,它就消失了(它不是一个广播,只有一个线程可以读取消息)。
因此,为了让代码伪工作,您可以这样做:
if msg == num {
fmt.Println(num, "hello from", msg)
return
}else {
// not my number, put it back in the channel
jr <- num
}您将获得预期的结果,但仍然存在一个问题:您的程序无法正确关闭。我想这只是为了实验/学习的目的,但在一个真正的程序中,您将使用完全不同的代码。告诉我你是否会对另一个版本感兴趣。
发布于 2016-04-13 13:01:41
在postHandler从通道jr接收到msg后,该值不再在通道中供另一个postHandler查找。频道不广播。
如果它不等于将值发送回通道,或者完全重构您的代码。
https://stackoverflow.com/questions/36598819
复制相似问题