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 關注
- 211 瀏覽
添加回答
舉報