- 7.2.1. 为错误添加相关内容
7.2.1. 为错误添加相关内容
发生错误的原因是作者试图在错误消息中添加 context 。 他们试图给自己留下一些线索,指出错误的根源。
让我们看看使用 fmt.Errorf 的另一种方式。
func WriteConfig(w io.Writer, conf *Config) error {buf, err := json.Marshal(conf)if err != nil {return fmt.Errorf("could not marshal config: %v", err)}if err := WriteAll(w, buf); err != nil {return fmt.Errorf("could not write config: %v", err)}return nil}func WriteAll(w io.Writer, buf []byte) error {_, err := w.Write(buf)if err != nil {return fmt.Errorf("write failed: %v", err)}return nil}
通过将注释与返回的错误组合起来,就更难以忘记错误的返回来避免意外继续。
如果写入文件时发生 I/O 错误,则 error 的 Error() 方法会报告以下类似的内容;
could not write config: write failed: input/output error
