在 Go 中,異常情況通常使用錯誤值來處理,錯誤值實現了錯誤介面。介面的 Error() 方法傳回描述錯誤的字串。
但是,在處理自訂錯誤類型時,必須避免在 Error() 方法中出現遞迴。
考慮一個自訂錯誤類型,其中 Error() 方法呼叫 fmt.Sprint(e) 將錯誤值轉換為字串。這種方法會帶來一個潛在的問題:
1 2 3 4 5 6 7 |
|
如果您現在嘗試列印錯誤,則會發生無限循環:
1 2 3 4 |
|
發生這種情況是因為fmt. Sprint(e) 呼叫e .Error(),然後再呼叫fmt.Sprint(e),依此類推。
要打破遞歸,請將e 轉換為沒有String 或Error 方法的值,然後再將其傳遞給fmt.Sprint:
1 2 3 4 |
|
在此範例中,將e 轉換為float64 刪除其String 和Error 方法,防止無限迴圈。
以上是Go中處理自訂錯誤時如何防止無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!