gpt4 book ai didi

go - 没有错误就返回golang

转载 作者:IT王子 更新时间:2023-10-29 01:42:13 25 4
gpt4 key购买 nike

在Golang中,是否可以运行函数

err, value := function()
if err == nil {
return value
}

而不是这样做:

err, value := function()
if err != nil {
panic(err)
}
return err

如果有,是否有任何时间优势/奖金?

这不是非 fatal error 。我正在尝试将某些内容转换为不同的类型,但我不确定应该使用哪种类型。

最佳答案

panic 类似于异常,但不会传递给调用者(也就是当您调用 panic 时,它会随即发生;您无需等待)。您应该使用代码的第一个示例,您可以在其中尝试操作、失败并继续。

func main() {
s1 := rand.NewSource(time.Now().UnixNano())
r1 := rand.New(s1)

// Generate some random numbers, and call into add()
for i := 0; i < 10; i++ {
s, err := add(r1.Intn(100), r1.Intn(100))
if err != nil {
fmt.Println(err)
continue
}
fmt.Println(s)
}
}

// Error if we get a sum over 100
func add(a int, b int) (int, error) {
s := a + b
if s > 100 {
return s, errors.New("Hey doofus, error!")
}
return s, nil
}

如果你在这个例子中感到 panic ,你就完成了(试一试——而不是返回错误 panic("Some error")。但是,相反,我们确定有一个错误,我们可以尝试生成另一个随机数。

就像其他人所说的那样,如果您有一个您无法恢复的用例(假设您试图从文件中读取,但该文件不存在),您可能决定 panic 更好。但是,如果您有一个长时间运行的流程(如 API),您将希望继续搅动,尽管出现任何错误。

在这里玩:http://play.golang.org/p/ThXTxVfM6R

OP 用一个用例更新了他的帖子——他正在尝试转换为一种类型。如果你在这个函数中 panic ,你就会死在水里。相反,我们想要返回一个错误,让调用者决定如何处理错误。以此为例:

func interfaceToString(i interface{}) (string, error) {
if i == nil {
return "", errors.New("nil interface")
}

switch i.(type) {
case string:
return i.(string), nil
case float64:
return strconv.Itoa(int(i.(float64))), nil
case int:
return strconv.Itoa(i.(int)), nil
}

return "", errors.New(fmt.Sprintf("Unable to convert %v", i))
}

在这里玩:http://play.golang.org/p/7y7v151EH4

关于go - 没有错误就返回golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752643/

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