我试图在 goroutine 中做一个“if”语句。问题:如何从 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/105 你好来自 52 你好来自 2
2 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
好的,有很多问题。
首先,它不起作用,因为当从通道读取某些内容时,它会消失(它不是广播,只有一个线程可以读取消息)。
因此,为了让您的代码伪工作,您可以这样做:
if msg == num {
fmt.Println(num, "hello from", msg)
return
}else {
// not my number, put it back in the channel
jr <- num
}
您将获得预期的结果,但仍然存在一个问题:您的程序无法正常关闭。我想这仅用于实验/学习目的,但在实际程序中,您将使用完全不同的代码。告诉我你是否对另一个版本感兴趣。
- 2 回答
- 0 关注
- 162 浏览
添加回答
举报
0/150
提交
取消