我有一個 golang 函式,它遞回地遍歷 json 字串,并用它們參考的 json 檔案替換自定義參考。我只是注意到我忘了處理回圈參考,回圈參考的出現會導致無限遞回。在我解決這個問題之前,我想為這個案例撰寫一個測驗(使用 ginkgo/gomega),這樣我可以驗證我的解決方案是否有效,如果我打破它并再次遇到這個問題,我會注意到。
但是我該怎么做if this function call does not return within <timeout>, abort it and fail the test呢?
Gomega'sEventually有一個超時,但如果它已經在運行,它不會中止該函式,因此在這種情況下它將永遠阻塞。
我找到了如何使用和通道檢查超時的示例select,但據我了解,不可能從外部終止 goroutine - 所以我的函式將繼續在后臺運行,占用資源?
檢查無限遞回的最佳方法是什么?
uj5u.com熱心網友回復:
您不能中止正在運行的函式。該函式必須支持流產,慣用地通過一個context.Context或一個通道。如果你想支持超時或中止,你必須改變/重構你的函式。并且函式本身必須支持這一點,例如,context.Context如果請求取消,它必須監視并提前回傳。有關詳細資訊和示例,請參閱在取消背景關系時終止函式執行
見相關:
在 Go 中取消阻塞操作
取消用戶特定的 goroutine
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409647.html
標籤:
下一篇:無效字符的位元組到字串轉換
