我在這里關注這個例子:https://www.socketloop.com/tutorials/golang-smarter-error-handling-with-strings-contains-function if !strings.Contains(err.Error(), "timed out") { fmt.Printf("resulting error not a timeout: %s", err) }但是,如果我在我的代碼中這樣做,我會得到這個err.Error 未定義(類型 interface {} 是沒有方法的接口)我想知道我在這里做錯了什么,我應該如何檢查確切的錯誤(在我的情況下,我想從錯誤“切片邊界超出范圍”中恢復)最好的,
1 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
使用類型斷言獲取error https://play.golang.org/p/BryV7YfZHS
defer func(){
err := recover().(error)
fmt.Println(err.Error())
}()
a := make([]int, 0)
a[1] = 0
但我建議你不要這樣做。首先,你不應該使用recover。在幾乎所有情況下,這意味著你做錯了什么。相反,修復恐慌的代碼。
其次,不要使用字符串匹配來確定錯誤的原因。它不好的原因有很多,但我只想說這不是 Go 的做事方式。我知道您可能正在使用的 API 并沒有讓您選擇,而是嘗試找到更好的方法。使用類型斷言,輸入 switch 以獲取確切的錯誤類型并從那里開始。
- 1 回答
- 0 關注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消