服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

Go 为什么不像 Rust 用 ?!做错误处理?

日期: 来源:脚本之家收集编辑:陈煎鱼
将 脚本之家 设为“星标
第一时间收到文章更新

来源公众号:脑子进煎鱼了(ID:eddycjy)

已获得原公众号的授权转载

之前每次写 Go 错误处理的相关提案时,大家都会在评论区探讨到一个事。

Go 这活不得劲,常被戏称,一个大型 Go 工程项目里 60% 的代码都是 if err != nil

咱们错误处理怎么不借鉴一下 Rust,高低也整个问号的语法特性,就可以简化这三行了,不香吗?

借鉴 Rust 用 ?!| 符号

核心的点是在现有的 Go 例子中,我们一般要写 if err != nil,多了之后又多又杂看起来还有些麻烦。

如下 Go 代码:

count, err = fd.Write(bytes)
if err != nil {
    return nil, err
}

如果我们也借鉴 Rust 使用 ! 和 ?的简化版,我们可以演进为如下代码:

count := fd.Write!(bytes)
count := fd.Write(bytes)!
count := fd.Write(bytes)?

也有大佬提到可以演进一下使用 || 变成:

fd.Write(bytes) || Expr

不管如何,就是不需要写三行的 if err != nil 去处理这个硬逻辑,只要加个符号(类似语法糖)就行,由编译器和运行时自己去处理就完了。

这类提案都会被拒绝

为什么最后 Go 没有落地呢?

普遍社区中参与讨论的大佬认为,新的语法糖相较 if err != nil,会增加认知和理解代码的开销,并降低代码可读性。

这些神奇的的功能和符号,他们是隐秘的,更容易让人错过,会导致程序控制流逻辑发生改变,增加程序员的心智负担。

Go 初学者也需要额外掌握这几个符号的理解和应用,有新的学习成本。

这类提案会被直接拒绝,请大家不要再幻想了。

希望开发者自己定模板

如果只是为了解决那 3 行代码,部分大佬表示 Go 开发者应该自己定义错误模板。而不是借助引入更多的新语法来解决,这也不符合 Go 语言对 “less is more” 的理念定义。

从现在对 Go 错误处理的多个提案讨论和社区交流来看,Go 在这块已经陷入僵局,很像工作中的什么呢?

像我们常提的既要也要还要,重要的是这事 ROI 也不够高,导致Go 核心团队的动力不足,也不想互相得罪了。

只能甩出一句经典:”让 Rust 特性留给 Rust“。

总结

Go 错误处理 if err != nil 的解决,已经成为了一块烫手的山芋,怎么改都不讨好了,相关负责人积极讨论,实施持续摆烂中,没有新的建设。

根据以往在依赖管理的,我猜测最终大概率会由 Go 团队大当家 Russ Cox 操刀,否则很难有人能力挽狂澜。不过,目前来看他对此并不感兴趣。对于开启 Go 工具链遥测的提案,也刚吃了闭门羹。

错误处理的碰撞,真是 Go 的一生之敌。

<END>

程序员专属T恤

商品直购链接 

相关阅读

  • Mac 和 Win,到底用哪个系统学编程?

  • 将 脚本之家 设为“星标⭐”第一时间收到文章更新出处:程序员鱼皮(ID:coder_yupi)已获得原公众号的授权转载今天来聊一个老生常谈的问题,学编程时到底选择什么操作系统?Mac、Windo
  • 扯什么 try-catch 性能问题?

  • 关注“脚本之家”,与百万开发者在一起来源 | yes的练级攻略如若转载请联系原公众号“大佬,你看着这鬼代码,竟然在 for 循环里面搞了个 try-catch,不知道try-catch有性能损耗吗?
  • 文科生和理科生是怎样互相“吐槽”的?

  • 在大学里有摁坏计算器的理科生和疯狂啃书的文科生还有挖土的工科生种菜的农科生发量堪忧的医学生常和张三打交道的法学生......十三个学术门类在社会上分工明确(都有一身槽点
  • 成年人最想哭的20个瞬间

  • 来源:匡北北(ID:kbb9934) 最后 有一个奇怪的现象:当朋友受挫时我们会开导他,告诉他没什么大不了;当事情发生在自己身上却深陷其中而不自知,失去了当初安慰友人的心态。这是再正常不
  • 影讯|3月17日放映

  • 观影提示观影期间请您全程佩戴好口罩,感谢大家的配合,祝大家观影愉快!网络售票平台:淘票票、中国电影资料馆APP《特写》Close-Up 19903月17日 19:00 | 小西天艺术影院1号厅导演/
  • 财务BP到底是做什么的?(深度好文,建议收藏)

  • 众所周知,现在财务人不像是以前那么好过,智能AI“ChatGTP”、“财务共享中心”正在逐步替代低端的财务从业者,传统财务行业面临着重新洗牌的局面。以海尔公司为例,他们今年校招
  • 刷屏!滨河路站3号口火啦!

  • 满树烂漫,如云似霞这两天,苏州轨交1号线滨河路站3号口的樱花火啦摄影:喜玛拉雅北坡的鱼打开抖音、小红书搜手一搜,都是来拍大片的大家纷纷评论“真的好美啊”“我哭了”“哇,我一

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • Go 为什么不像 Rust 用 ?!做错误处理?

  • 将 脚本之家 设为“星标⭐”第一时间收到文章更新来源公众号:脑子进煎鱼了(ID:eddycjy)已获得原公众号的授权转载之前每次写 Go 错误处理的相关提案时,大家都会在评论区探讨到
  • Mac 和 Win,到底用哪个系统学编程?

  • 将 脚本之家 设为“星标⭐”第一时间收到文章更新出处:程序员鱼皮(ID:coder_yupi)已获得原公众号的授权转载今天来聊一个老生常谈的问题,学编程时到底选择什么操作系统?Mac、Windo
  • 扯什么 try-catch 性能问题?

  • 关注“脚本之家”,与百万开发者在一起来源 | yes的练级攻略如若转载请联系原公众号“大佬,你看着这鬼代码,竟然在 for 循环里面搞了个 try-catch,不知道try-catch有性能损耗吗?