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

M.E*_*.E. -2 go strconv

我有以下测试基本代码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)

}
Run Code Online (Sandbox Code Playgroud)

我想处理 中是否有错误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)

}
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

% 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
Run Code Online (Sandbox Code Playgroud)

我想了解如何处理Atoi可以返回的两个错误( ErrSyntax, ErrRange)。

koz*_*zmo 6

您可以使用errors包(在 Go 1.13 中处理错误):

if errors.Is(err, strconv.ErrSyntax) {
    fmt.Println("syntax error")
    os.Exit(1)
}
Run Code Online (Sandbox Code Playgroud)