为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中返回错误时结果值的最佳实践

在 Go 中返回错误时结果值的最佳实践

Go
红颜莎娜 2023-06-05 17:28:35
如果您的函数既返回值类型又返回错误类型,那么当错误类型为非 nil 时确保值类型为 niled/零值是“可行的方法”吗?例子:func mayError() ([]string, error) {   ... }如果不是,[]string返回值应该是吗?nilerrornil
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

一般来说,如果一个函数未能完成任务,它的返回值应该被视为不可靠的。因为 go 中的错误是值,调用者可能会忽略它返回的错误。例如:


foo := myType{

    Bar: 123,

    Foo: "some string",

}


b, _ := json.Marshal(foo)

我忽略了这个错误,因为它是我创建的类型,而且我知道它可以被编组。但是,无论哪种方式都被认为是不好的做法。尽管如此,现在想象有人调用您的函数:


slice, _ := mayError()

而你的函数,在向切片中添加 2 个元素后,出错了。返回部分切片可能并且很可能会导致进一步的错误行为。这使得代码难以调试。总的来说,我会说在这种情况下最好返回一个 nil 切片和一个错误。如果代码如下所示:


slice, _ := mayError() // returns nil, someErr

// panic

if slice[0] != "" {

}

至少错误会立即显示出来,您会看到返回的任何错误都mayError被忽略了。这使得代码更容易调试/维护/修复。


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信