go2.0的错误处理check/handle,try草案都被否了,谁有最新消息?

taatcc · · 1650 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

<b>check/handle草案</b> ```go func CopyFile(src, dst string) error { handle err { return fmt.Errorf("copy %s %s: %v", src, dst, err) } r := check os.Open(src) defer r.Close() w := check os.Create(dst) handle err { w.Close() os.Remove(dst) // (only if a check fails) } check io.Copy(w, r) check w.Close() return nil } ``` <pre> 感觉是减少了重复代码,但有几点不习惯 a)错误处理在上面,看代码时,会先看到错误处理,打乱思维模式 b)增加了2个关键字,不和谐 c)handle捕获到错误后,会从下面向上一直执行所有handle,与defer混乱 d)handle捕获到错误后,控制交给handle,无法回到之前出错的地方继续向下执行 </pre> <b>try草案</b> ```go func CopyFile(src, dst string) (err error) {     defer func() {         if err != nil {             err = fmt.Errorf("copy %s %s: %v", src, dst, err)         }     }()     r := try(os.Open(src))     defer r.Close()     w := try(os.Create(dst))     defer func() {         w.Close()         if err != nil {             os.Remove(dst) // only if a “try” fails         }     }()     try(io.Copy(w, r))     try(w.Close())     return nil } ``` <pre> 使用内置函数,没增加关键字 该方案感觉同样先处理错误,依然打乱思维模式 try还带括号,看起来不简洁,太多括号 defer中又嵌套if err != nil,感觉类似panic、recover </pre> 2种草案都被否,也不知道go2.0现在进展怎么样了,谁有新资讯?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1650 次点击  
加入收藏 微博
2 回复  |  直到 2019-08-30 22:54:31
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传