我有一个golang函数,它递归地遍历json字符串,并用它们所引用的json文档替换自定义引用。我只是注意到我忘记处理循环引用,它的出现将导致无休止的递归。在修复这个问题之前,我想为这个例子编写一个测试(使用ginkgo/gomega),这样我就可以验证我的解决方案是否有效,并且我会注意到我是否会破坏它并再次遇到这个问题。
但是我怎么做像if this function call does not return within <timeout>, abort it and fail the test这样的事情?
Gomega的Eventually有一个超时,但是如果它已经在运行,它不会中止该函数,所以在本例中它将永远阻塞。
我找到了这个例子,用于检查如何使用select和通道检查超时,但据我所知,不可能从外部终止goroutine --所以我的函数将继续在后台运行,占用资源?
检查无限递归的最佳方法是什么?
发布于 2022-01-11 13:15:57
不能中止正在运行的函数。该功能必须支持堕胎,特别是通过一个context.Context或一个通道。如果您想支持超时或堕胎,您必须更改/重构您的函数。函数本身必须支持这一点,例如,如果请求取消,它必须监视context.Context并尽早返回。有关详细信息和示例,请参见如果上下文被取消,则终止函数执行
见有关:
https://stackoverflow.com/questions/70667439
复制相似问题