猿问

如果没有错误则返回 Golang

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


err, value := function()

if err == nil {

  return value

}

而不是这样做:


err, value := function()

if err != nil {

  panic(err)

}

return err

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


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


桃花长相依
浏览 134回答 1
1回答

明月笑刀无情

恐慌类似于异常,但不会传递给调用者(也就是说,当您调用恐慌时,它会立即发生;您无需等待)。您应该使用代码的第一个示例,您可以在其中尝试操作、失败并继续。func main() {&nbsp; &nbsp; s1 := rand.NewSource(time.Now().UnixNano())&nbsp; &nbsp; r1 := rand.New(s1)&nbsp; &nbsp; // Generate some random numbers, and call into add()&nbsp; &nbsp; for i := 0; i < 10; i++ {&nbsp; &nbsp; &nbsp; &nbsp; s, err := add(r1.Intn(100), r1.Intn(100))&nbsp; &nbsp; &nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(err)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(s)&nbsp; &nbsp; }}// Error if we get a sum over 100func add(a int, b int) (int, error) {&nbsp; &nbsp; s := a + b&nbsp; &nbsp; if s > 100 {&nbsp; &nbsp; &nbsp; &nbsp; return s, errors.New("Hey doofus, error!")&nbsp; &nbsp; }&nbsp; &nbsp; return s, nil}如果你在这个例子中恐慌,你就大功告成了(试试它——而不是返回一个错误做恐慌(“一些错误”)。但是相反,我们确定有一个错误,我们可以尝试生成另一个随机数字。就像其他人所说的那样,如果您有一个无法恢复的用例(假设您试图从文件中读取,但文件不在那里),您可能会决定最好恐慌。但是如果你有一个长时间运行的进程(比如一个 API),你会想要继续搅动,尽管有任何错误。GoPlay 在这里:http ://play.golang.org/p/ThXTxVfM6ROP 用用例更新了他的帖子——他正在尝试转换为一种类型。如果你在这个函数中恐慌,你会死在水里。相反,我们想要返回一个错误,让调用者决定如何处理错误。以此为例:func interfaceToString(i interface{}) (string, error) {&nbsp; &nbsp; if i == nil {&nbsp; &nbsp; &nbsp; &nbsp; return "", errors.New("nil interface")&nbsp; &nbsp; }&nbsp; &nbsp; switch i.(type) {&nbsp; &nbsp; case string:&nbsp; &nbsp; &nbsp; &nbsp; return i.(string), nil&nbsp; &nbsp; case float64:&nbsp; &nbsp; &nbsp; &nbsp; return strconv.Itoa(int(i.(float64))), nil&nbsp; &nbsp; case int:&nbsp; &nbsp; &nbsp; &nbsp; return strconv.Itoa(i.(int)), nil&nbsp; &nbsp; }&nbsp; &nbsp; return "", errors.New(fmt.Sprintf("Unable to convert %v", i))}GoPlay 在这里:http ://play.golang.org/p/7y7v151EH4
随时随地看视频慕课网APP

相关分类

Go
我要回答