当前位置:首页 > 科技  > 软件

Go 新提案:用 #err 标识符去做错误处理!

来源: 责编: 时间:2024-06-05 17:41:23 241观看
导读大家好,我是煎鱼。前几天看 Reddit 社区里的讨论,发现 Go 这一门编程语言,错误处理永远是讨论的议题之一。本着追踪网友脑洞 Proposal 的基础上,周末看到个被反对比较多的 Go2 错误处理提案。图片今天结合分享给大家,好的

大家好,我是煎鱼。eQR28资讯网——每日最新资讯28at.com

前几天看 Reddit 社区里的讨论,发现 Go 这一门编程语言,错误处理永远是讨论的议题之一。本着追踪网友脑洞 Proposal 的基础上,周末看到个被反对比较多的 Go2 错误处理提案。eQR28资讯网——每日最新资讯28at.com

图片图片eQR28资讯网——每日最新资讯28at.com

今天结合分享给大家,好的坏的都可以看看别人的想法。eQR28资讯网——每日最新资讯28at.com

问题背景

在 Go 这门编程语言中,错误处理机制主要是依赖于 if err != nil 的方式。因此在对函数做一定的封装后。eQR28资讯网——每日最新资讯28at.com

代码最终常呈现出以下样子:eQR28资讯网——每日最新资讯28at.com

jy1, err := GetFoo()if err != nil {    return err}jy2, err := SliceTheBar(varFoo)if err != nil {    return err}err := CheckBarSlice(sliceBar)if err != nil {    return err}...

有部分开发者会认为这比较的丑陋、混乱且难以阅读。eQR28资讯网——每日最新资讯28at.com

图片图片eQR28资讯网——每日最新资讯28at.com

有人戏称一个 Go 工程里有 60% 的代码是 if err != nil,为此我见过直接用 panic 来做错误处理的团队。eQR28资讯网——每日最新资讯28at.com

新提案:用 #err 作为标识符

提案的提出者 @mainjzb,主要的设计目标是:将 # 作为标识位,格式上是把 #xxx 作为程序处理错误的标识符。帮助开发者阅读代码并简化代码。eQR28资讯网——每日最新资讯28at.com

原本 Go 错误处理方式,如下老代码:eQR28资讯网——每日最新资讯28at.com

n, err := io.Write(x)n, _ := io.Write(x) n, err := io.Write(x)if err != nil {   return 0, err}n, err := io.Write(x)if err != nil {   return 0, fmt.Error("tcp closed: %w", err)}n, err := io.Write(x)if err != nil{    panic(err)}

使用上述提案后的错误标识改造后,新的代码如下:eQR28资讯网——每日最新资讯28at.com

// 1. err as valuen := io.Write(x) #err       // 2. ignore errorn := io.Write(x) #@ignore   //  3. return error immediately、n := io.Write(x) #@done     // 4. wrap additional informationn := io.Write(x) #@wrap("tcp closed: %w") // 5. panic errn := io.Write(x) #@must

结合上述提案改进后的代码,原作者给出了以下几种 # 标识符的想法:eQR28资讯网——每日最新资讯28at.com

  1. #err 标识符:err 变量作为值,一切与以前 error 一样。只是变成了 #err 的标识用法。
  2. #@ignore 标识符:使忽略错误变得比以前更易读,也可以用附加的描述信息便于开发者阅读。
  3. #@done 标识符:直接返回错误信息。很多时候(特别是在库中),只需要返回错误,无需执行任何操作。例如:url.parseAuthority。
  4. #@wrap 标识符:在 error 上附带更多的错误信息,例如:#@wrap 在实际业务代码中可以写作 #@wrap("io.Wirite err:")。
  5. #@must 标识符:这个标识符可以在产生错误时,直接触发 panic 事件。

总结

这个提案的作者有多门编程语言经验,本次提出的新提案,很明显是瞄着解决 Go 这门编程语言中的 if err != nil 的不断重复的代码内容的方向去的。eQR28资讯网——每日最新资讯28at.com

虽然原提案作者另辟蹊径,通过增加 #err 这类标识符来直接扭转错误处理,解决了大量重复 err 代码。eQR28资讯网——每日最新资讯28at.com

图片图片eQR28资讯网——每日最新资讯28at.com

但最终与 Go 语言的其他部分过于不适。已经被 ban 了。谨记:想要优化 GO 的 if err != nil 还得要考虑整体适合度,不能一厢情愿。eQR28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92114-0.htmlGo 新提案:用 #err 标识符去做错误处理!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python动态创建类,为编程带来极大的灵活性和扩展性

下一篇: Axios Node 端请求是如何实现的?

标签:
  • 热门焦点
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
Top