我有以下測試的基本代碼strconv.Atoi():package mainimport ( "fmt" "strconv")func main() { var a int var b string var err Error b = "32" a,err = strconv.Atoi(b) fmt.Println(a) fmt.Println(err)}我想處理是否存在錯誤strconv.Atoi(),特別是如果錯誤是由于語法或范圍,strconv.Atoi()可以提供的條件。為此,我嘗試了以下方法:package mainimport ( "os" "fmt" "strconv")func main() { var a int var b string var err error b = "32" a,err = strconv.Atoi(b) if(err.Err == ErrSyntax) { fmt.Println("ERROR") os.Exit(1) } fmt.Println(a) fmt.Println(err)}我得到了這個結果:% go build test.go# command-line-arguments./test.go:19:8: err.Err undefined (type error has no field or method Err)./test.go:19:16: undefined: ErrSyntax我想了解如何處理這兩個錯誤Atoi可以返回(ErrSyntax,ErrRange)。
2 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
您可以使用errors包(使用 Go 1.13 中的錯誤):
if errors.Is(err, strconv.ErrSyntax) {
fmt.Println("syntax error")
os.Exit(1)
}

慕森王
TA貢獻1777條經驗 獲得超3個贊
包的包文檔顯示沒有包限定符的名稱,要從其他地方使用它們,您必須限定它們。所以試試strconv.ErrSyntax。
但這不會有太大幫助,因為沒有.Err通用錯誤接口的成員。要檢查這一點,您必須知道返回的錯誤實際上是一個strconv.*NumError. 根據文檔,它應該是。
https://play.golang.org/p/UKL6kKDqSx4
if err != nil && err.(*strconv.NumError).Err == strconv.ErrSyntax {
fmt.Println("syntax error")
os.Exit(1)
}
- 2 回答
- 0 關注
- 184 瀏覽
添加回答
舉報
0/150
提交
取消