如何检查函数返回的错误类型(strconv.Atoi)

我有以下测试的基本代码strconv.Atoi():


package main


import (

        "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 main


import (

        "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)。


慕哥9229398
浏览 151回答 2
2回答

繁星淼淼

您可以使用errors包(使用 Go 1.13 中的错误):if errors.Is(err, strconv.ErrSyntax) {    fmt.Println("syntax error")    os.Exit(1)}

慕森王

包的包文档显示没有包限定符的名称,要从其他地方使用它们,您必须限定它们。所以试试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)    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go