• 7.2.1. 为错误添加相关内容

    7.2.1. 为错误添加相关内容

    发生错误的原因是作者试图在错误消息中添加 context 。 他们试图给自己留下一些线索,指出错误的根源。

    让我们看看使用 fmt.Errorf 的另一种方式。

    1. func WriteConfig(w io.Writer, conf *Config) error {
    2. buf, err := json.Marshal(conf)
    3. if err != nil {
    4. return fmt.Errorf("could not marshal config: %v", err)
    5. }
    6. if err := WriteAll(w, buf); err != nil {
    7. return fmt.Errorf("could not write config: %v", err)
    8. }
    9. return nil
    10. }
    11. func WriteAll(w io.Writer, buf []byte) error {
    12. _, err := w.Write(buf)
    13. if err != nil {
    14. return fmt.Errorf("write failed: %v", err)
    15. }
    16. return nil
    17. }

    通过将注释与返回的错误组合起来,就更难以忘记错误的返回来避免意外继续。

    如果写入文件时发生 I/O 错误,则 errorError() 方法会报告以下类似的内容;

    1. could not write config: write failed: input/output error