2 回答

TA贡献1757条经验 获得超8个赞
这让我想起了 Rob Pike最近的Errors are values,以及Rob Pike 先生在 GoCon 2014 上教我关于 Go 中错误处理的实践
然而,关键的教训是错误是值,Go 编程语言的全部功能可用于处理它们。
值得强调的是,无论设计如何,程序检查错误(无论它们是否暴露)都是至关重要的。这里的讨论不是关于如何避免检查错误,而是关于使用语言来优雅地处理错误。
一种技术是定义一个名为 an 的对象errWriter:
type errWriter struct {
w io.Writer
err error
}
该write方法调用底层的Write方法Writer并记录第一个错误以备后用:
func (ew *errWriter) write(buf []byte) {
if ew.err != nil {
return
}
_, ew.err = ew.w.Write(buf)
}
一旦发生错误,该write方法就会变为空操作,但error会保存该值。
给定errWriter类型及其写入方法,上面的代码可以重构:
ew := &errWriter{w: fd}
ew.write(p0[a:b])
ew.write(p1[c:d])
ew.write(p2[e:f])
// and so on
if ew.err != nil {
return ew.err
}
- 2 回答
- 0 关注
- 216 浏览
添加回答
举报