2 回答
TA贡献1829条经验 获得超6个赞
我会转
func doSomething() int, ? {
...
if somethingBadHappened {
return ?, err
}
if somethingElseBadHappened {
return ?, err2
}
return x, nil
}
进入
func doSomething() (r int, err error) {
...
if somethingBadHappened {
err = err1 // Whatever satisfies the `error` interface
return
}
if somethingElseBadHappened {
err = err2 // dtto
return
}
return x, nil
}
IOW,在调用站点,如果 err != nil,则忽略、从不使用或依赖任何其他返回值是惯用的*,所以只要不关心r上面是否已分配了一些中间值。
(*) 在第一个近似值中,即如果没有另外说明。例如,一个io.Reader显式声明它可以同时返回err == io.EOF有效数据:
当 Read 在成功读取 n > 0 个字节后遇到错误或文件结束条件时,它返回读取的字节数。它可能会从同一个调用中返回(非零)错误或从后续调用中返回错误(和 n == 0)。这种一般情况的一个实例是,在输入流末尾返回非零字节数的 Reader 可能返回 err == EOF 或 err == nil。不管怎样,下一个 Read 应该返回 0,EOF。
- 2 回答
- 0 关注
- 221 浏览
添加回答
举报