gpt4 book ai didi

go - 我无法从 strconv 包访问 err.Err

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:09 32 4
gpt4 key购买 nike

我可能在这里遗漏了一些非常简单的东西:

package main

import (
"fmt"
"strconv"
"reflect"
)

func main() {
s := "abd"
fmt.Println(s)
_, err := strconv.Atoi(s)
if err != nil {
fmt.Println(err)
}

fmt.Println(reflect.TypeOf(err))

fmt.Println(err.Err)

}

我正在尝试提取错误本身,例如ErrSyntaxErrRange,但我做不到。

看完之后:

https://golang.org/src/strconv/atoi.go?s=3604:3671#L16

我看到 err 是指向 strconv.NumError

的指针
    15  // A NumError records a failed conversion.
16 type NumError struct {
17 Func string // the failing function (ParseBool, ParseInt, ParseUint, ParseFloat)
18 Num string // the input
19 Err error // the reason the conversion failed (ErrRange, ErrSyntax)
20 }

Err 是包含 ErrRangeErrSyntax 的字段。因此,我认为 err.Err 会起作用,但我得到:

err.Err undefined (type error has no field or method Err

Err 是公开的,我是否遗漏了一些可见性规则?

我错过了什么?

最佳答案

使用 type assertion获取 *strconv.NumError 值:

if e, ok := err.(*strconv.NumError); ok {
fmt.Println("e.Err", e.Err)
}

playground example

关于go - 我无法从 strconv 包访问 err.Err,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667627/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com