gpt4 book ai didi

go - Go-根据字符串返回包错误的最佳方法?

转载 作者:行者123 更新时间:2023-12-02 11:25:52 25 4
gpt4 key购买 nike

我有一个带有定义的导出错误的程序包,以及一个解析可能包含错误数据的字符串的方法。有没有办法返回与字符串匹配的导出错误?只能使用switch-case吗?

package foobarbaz

/* Import */

var (
ErrFoo = errors.New("foo")
ErrBar = errors.New("bar")
/* More... */
)

func ParseStringWithErr(s string) (string, error) {
// Data looks like e.g. "data:foo"
var result string
var err error
result = getResultAsString(s)
err = errors.New(getErrAsString(s)) // Will be "foo", "bar", etc... as string

return result, err // DOESN'T WORK
// New error won't be equivalent to the exported Errors
}
实际上,它比这稍微复杂一点,因为解析后的值随后存储在一个对象中,然后返回该对象。有可能要分析的字符串不包含错误数据,在这种情况下,不会调用getErrAsString部分(并且err保留了正确的 <nil>的空值)。
显然,我可以编写一个仅打开错误字符串的函数,但是有几个导出的错误,似乎不得不为每个错误编写一个案例很奇怪。

最佳答案

基本上,您想要的是从字符串的错误字符串中查找error值。
初始化并使用一个简单的映射:

var errMap = map[string]error{}

func init() {
for _, err := range []error{ErrFoo, ErrBar} {
errMap[err.Error()] = err
}
}

func LookupError(s string) (err error, ok bool) {
err, ok = errMap[s]
return
}
测试它:
err, ok := LookupError("foo")
fmt.Println(err, ok, err == ErrFoo)

err, ok = LookupError("bar")
fmt.Println(err, ok, err == ErrBar)

err, ok = LookupError("baz")
fmt.Println(err, ok)
哪个输出(在 Go Playground上尝试):
foo true true
bar true true
<nil> false

关于go - Go-根据字符串返回包错误的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64578214/

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