gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:07:47 26 4
gpt4 key购买 nike

如果您的函数既返回值类型又返回错误类型,那么在错误类型为非 nil 时确保值类型为 niled/零值是“可行的方法”吗?

例子:

func mayError() ([]string, error) {
...
}

如果 error 不是 nil[]string 的返回值是否应该是 nil

最佳答案

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

foo := myType{
Bar: 123,
Foo: "some string",
}

b, _ := json.Marshal(foo)

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

slice, _ := mayError()

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

slice, _ := mayError() // returns nil, someErr
// panic
if slice[0] != "" {
}

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

关于go - 在 Go 中返回错误时结果值的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54577824/

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