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

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

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

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

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

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

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

问题背景

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

代码最终常呈现出以下样子:1aT28资讯网——每日最新资讯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}...

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

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

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

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

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

原本 Go 错误处理方式,如下老代码:1aT28资讯网——每日最新资讯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)}

使用上述提案后的错误标识改造后,新的代码如下:1aT28资讯网——每日最新资讯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

结合上述提案改进后的代码,原作者给出了以下几种 # 标识符的想法:1aT28资讯网——每日最新资讯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 的不断重复的代码内容的方向去的。1aT28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 国行版三星Galaxy Z Fold5/Z Flip5发布 售价7499元起

    2023年8月3日,三星电子举行Galaxy新品中国发布会,正式在国内推出了新一代折叠屏智能手机三星Galaxy Z Fold5与Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 三星推出Galaxy Tab S9系列平板电脑以及Galaxy Watch6系列智能手表

    2023年7月26日,三星电子正式发布了Galaxy Z Flip5与Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板电脑以及三星Galaxy Watch6系列智能手表也同期
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
Top