go - 如何使用 golang goroutine,select 和 if 语句到 return?
go - How to use golang goroutine, select and if statement to return?
我正在尝试在 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/10
- 5 来自 5 的问候
- 2 来自 2 的问候
在 postHandler
从频道 jr
收到 msg
后,该值已不在频道中以供另一个 postHandler
查找。频道不广播。
send the value back into the channel 如果它不等于 num
或完全重构您的代码。
好的,有多个问题。
首先,它不起作用,因为当从频道读取某些内容时,它会消失(这不是广播,只有一个线程可以读取消息)。
因此,为了让您的代码能够伪工作,您可以这样做:
if msg == num {
fmt.Println(num, "hello from", msg)
return
}else {
// not my number, put it back in the channel
jr <- num
}
您会得到预期的结果,但仍然存在一个问题:您的程序无法正常关闭。我想这只是为了 experiment/learning 目的,但在实际程序中你会使用完全不同的代码。如果您对另一个版本感兴趣,请告诉我。
我正在尝试在 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/10
- 5 来自 5 的问候
- 2 来自 2 的问候
在 postHandler
从频道 jr
收到 msg
后,该值已不在频道中以供另一个 postHandler
查找。频道不广播。
send the value back into the channel 如果它不等于 num
或完全重构您的代码。
好的,有多个问题。
首先,它不起作用,因为当从频道读取某些内容时,它会消失(这不是广播,只有一个线程可以读取消息)。
因此,为了让您的代码能够伪工作,您可以这样做:
if msg == num {
fmt.Println(num, "hello from", msg)
return
}else {
// not my number, put it back in the channel
jr <- num
}
您会得到预期的结果,但仍然存在一个问题:您的程序无法正常关闭。我想这只是为了 experiment/learning 目的,但在实际程序中你会使用完全不同的代码。如果您对另一个版本感兴趣,请告诉我。