1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個贊
在您的 switch 語句中,您正在檢查err.(type)一個type。valuesio.EOF和不是類型,它們是對象io.ErrUnexpectedEOF。ErrTimeoutExceeded您無法檢查類型是否為對象(不同的事物);但是,您可以檢查對象是否屬于某個類型。
您可以使用以下代碼檢查這兩種情況:
func isWorthRetrying(err error) bool {
switch err.(type) {
case temporary:
return true
default:
switch err {
case io.EOF:
return true
case io.ErrUnexpectedEOF:
return true
case ErrTimeoutExceeded:
return true
default:
return false
}
}
}
編輯:感謝 Adrian 的評論,errors.Is如果您使用的是 Go 1.13+,我們還可以使用 new 編寫此函數(shù):
func isWorthRetrying(err error) bool {
switch err.(type) {
case temporary:
return true
default:
return errors.Is(err, io.EOF) ||
errors.Is(err, io.ErrUnexpectedEOF) ||
errors.Is(err, ErrTimeoutExceeded)
}
}
- 1 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報(bào)