意図的な無限ループを持つコードで作業していますが、そのコードを変更することはできません。そのメソッドについていくつかのテストを書いてみたい(たとえば、適切なタイミングでアクションがトリガーされていることを確認するなど)。しかし、私はルーチンの束を孤立させたくありません。だから私はそのゴルーチンを殺す/中断する方法を見つけようとしている。無限ループ内でメソッドを終了する(golang)
私は信号の後にそれを殺すラッパー関数でラップしようと考えていました。このように(動作しません)。
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
に決して行きません。あなたが別のルーチンでそれを行うなら、あなたはちょうど問題を悪化させました。
私はそのルーチンを殺すことができる方法はありますか?
(はい - 私はむしろ無限ループのコードを変更するだろうが、ここにいない缶)