go - 在 Go 中返回错误时结果值的最佳实践
问题描述
如果您的函数既返回值类型又返回错误类型,当错误类型为非 nil 时,确保值类型为 niled/零值是“可行的方法”吗?
例子:
func mayError() ([]string, error) {
...
}
如果不是,返回[]string
值应该nil
是?error
nil
解决方案
一般来说,如果一个函数未能完成任务,它的返回值应该被视为不可靠。因为 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
都被忽略了。这使得代码更容易调试/维护/修复。
推荐阅读
- php - 在子数组中搜索
- haskell - Haskell:对函数列表参数中的每个元素执行函数
- python - 如何将 pandas 数据框写入使用 Kerberos 身份验证的 HIVE 数据库
- java - 给定 AffineTransform,我如何确定旋转、镜像、缩放等?
- c++ - 模板:类专业化
- python - Scrapy + python:csv文件未按正确顺序导出
- angular - 如何在非本地主机的任何其他地方运行 Angular 应用程序(例如)
- javascript - 如何在各个地方呈现指令内的内容
- sql - 基于过去 1 年的 SQL 中的 Z 分数
- c# - 使用 JSON.NET 反序列化 C# 类中缺少默认构造函数的 json