我正在使用一段有意无限循环的代码,我无法修改该代码。我想对该方法编写一些测试(例如,确保它在正确的时间触发操作),但我不想孤立一堆 go 例程。因此,我正在尝试找到一种可以杀死/中断该 goroutine 的方法。
我正在考虑尝试将其包装在一个包装函数中,该函数会在发出信号后将其杀死。像这样(不起作用)。
func wrap(inf func()) func() {
return func() {
select {
case inf():
case <-time.After(5 * time.Second):
}
}
}
func main() {
go wrap(inf())()
// do things
}
我能想到的所有变化都不起作用。我正在考虑将它包装inf在一个写入通道(永远不会被调用)的函数中,或者带有 return 语句的东西。然后select可以从中读取。问题是你必须启动它。如果您在此例程中执行此操作,您将永远无法到达select. 如果你在另一个例程中这样做,你只会让问题变得更糟。
那么,有没有一种方法可以让我终止这种例行程序?
(是的 - 我宁愿更改无限循环代码,但不能在这里)
繁星淼淼
相关分类