如何退出一个带有无限循环通道的函数?

huangapple go评论82阅读模式
英文:

How to exit a function with infinite loop of channel

问题

你可以使用return语句来停止无限循环并退出函数。在你想要退出函数的地方,使用return即可。在你的代码中,你可以这样修改:

func WaitForConfirm(expectedLen int) {
    count := 0
    forever := make(chan bool)

    go func() {
        for i := 0; i < 5; i++ {
            count++
            if count == expectedLen {
                // 在这里使用 return 来退出函数
                return
            }
        }
    }()

    <-forever
}

这样,当 count 的值等于 expectedLen 时,循环会被终止,函数也会退出。

英文:

I have this function that listens to RabbitMQ to consume a message.
And at some point, I want to stop listening and close the channel and quit the function.

func WaitForConfirm(expectedLen int){
	count := 0
	forever := make(chan bool)

	go func() {
		for i := 0; i &lt; 5; i++ {
			count++
			if count == expectedLen {
				// HERE I WANT TO EXIT THE FUNCTION COMPLETELY
			}
		}
	}()

	&lt;-forever
}

Oh, btw, I call this function like this:

go WaitForConfirm(2)

So, how can I stop the infinite loop and exit the function?

答案1

得分: 2

实际上,你的代码中没有无限循环,只是 chan 阻塞了你的代码。

你应该向 chan 发送值以释放执行。

这里有一个示例:https://go.dev/play/p/ujJjwBBsiP0

英文:

Actually, there is no infinite loop in your code and just chan is blocking your code.

You should send value to chan to release execution.

Here Example: https://go.dev/play/p/ujJjwBBsiP0

huangapple
  • 本文由 发表于 2022年11月17日 16:31:11
  • 转载请务必保留本文链接:https://go.coder-hub.com/74472292.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定