我在這里關(guān)注這個(gè)例子: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) }但是,如果我在我的代碼中這樣做,我會(huì)得到這個(gè)err.Error 未定義(類型 interface {} 是沒有方法的接口)我想知道我在這里做錯(cuò)了什么,我應(yīng)該如何檢查確切的錯(cuò)誤(在我的情況下,我想從錯(cuò)誤“切片邊界超出范圍”中恢復(fù))最好的,
1 回答

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