dongsui0929 2013-12-31 23:51
浏览 502
已采纳

Golang合并错误

Lets say you have a simple function as so:

func create(path string) error {
        if err := ioutil.WriteFile(path, []byte{}, 0666); err != nil {
                return err
        }

        if err := os.Chmod(path, 0666); err != nil {
                _ = os.Remove(path)
                return err
        }

        return nil
}

I don't like ignoring the error out of Remove(). But I also don't want to swamp the error out of Chmod() and I don't want to leave the file since we didn't create() it successfully.

This is a simple example, and perhaps the function could be written differently to avoid this, but there are more complex situations that come up and this combining of errors I haven't seen mentioned in the golang community, so whats the idiom?

  • 写回答

2条回答 默认 最新

  • dongwuwu6104 2014-01-01 00:10
    关注

    The solution would be to store the error from Remove in a separate variable, and combine them with fmt.Errorf:

    if err := os.Chmod(path, 0666); err != nil {
            if e2 := os.Remove(path); e2 != nil {
                return fmt.Errorf("error changing permissions (%v); error deleting file (%v)", err, e2)
            }
            return err
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?