golang 的错误处理真的很糟糕

2023-10-22 12:00:01 +08:00
 yaott2020

一直用 golang ,一直有人吐槽 golang 错误处理很繁琐,一开始觉得还好,直到遇见了 rust 。不得不说 rust 错误处理真的很优雅。写了一段时间 rust 反过来写 golang ,繁琐感瞬间就出来了

4474 次点击
所在节点    Go 编程语言
33 条回复
equationzhao
2023-10-22 12:07:51 +08:00
确实,看过 rust 就觉得 go 的 err 有点...
Goooooos
2023-10-22 15:11:22 +08:00
我见过吐槽 go 的 err 的,下都都会用 java 来反驳,来证明 go 的 err 是最优雅的
learningman
2023-10-22 15:31:27 +08:00
Box<dyn Error> 一把梭是吧

其实 go 里你是能实现 rust 风格的 error 处理的,pattern matching 不好整,.unwrap 啥的你可以 replace error 搞
atVoid
2023-10-22 15:41:00 +08:00
https://github.com/morrisxyang/errors, 这里实现了 wrap, unwrap 等常见能力, 添加了错误码和堆栈的支持.
rust 的 pattern matching 可以给我一些 example 和资料吗? 我看看是否可以添加.
@yaott2020
thevita
2023-10-22 16:49:54 +08:00
现在 go 错误处理比刚出来的时候好多了,繁琐是有点,但是没啥心智负担(对写应用来说),只是和 rust 比起来显得有点草率,基本和 rust 无脑 anyhow::Error 一样
unnamedhao
2023-10-22 20:40:25 +08:00
if err != nil
cyp0633
2023-10-23 00:05:11 +08:00
感觉,rust>go>其他绝大部分 try-catch
studyrun
2023-10-23 00:53:30 +08:00
大道至简 警告[滑稽]
fdwjtz
2023-10-23 01:12:06 +08:00
接触 go 之前一直写 c ,go 这种错误处理方式倒觉得挺适应的
herozzm
2023-10-23 08:16:21 +08:00
try-catch 比 go 的 error 更恶心
pursuer
2023-10-23 08:51:04 +08:00
try-catch 多被用于异常处理,控制流来说是快速返回调用栈的作用(stack unwinding),C 里也有类似的 setjmp,longjmp 机制。
而 go 里 error 是多返回值,绝大多数语言其实也都可以实现类似的方案。
fenglangjuxu
2023-10-23 09:16:51 +08:00
@herozzm 同意 java 到处充斥这个 try catch 一层套一层
bli22ard
2023-10-23 09:27:35 +08:00
golang 的很糟糕,rust 比 golang 好在哪里?
abcdexx
2023-10-23 09:48:51 +08:00
我们 go 语言错误处理就是这样子的 (#^.^#)
trzzzz
2023-10-23 09:50:44 +08:00
golang 官方解释说:异常也被认为是一种返回值类型
kingbill
2023-10-23 10:48:48 +08:00
Java 的 try catch 不是能在最外层统一处理吗?我感觉这样挺省事的啊,反而是 go 每一层都要 if err != nil 感觉很啰唆
PTLin
2023-10-23 11:29:22 +08:00
月经贴了属于是
Winrey
2023-10-23 11:29:30 +08:00
个人觉得 java 的报错摆烂处理方便些; golang 精确处理方便些

rust 怎么都方便
yaott2020
2023-10-23 11:49:13 +08:00
@trzzzz 意思是直接 panic 抛出然后拿个 defer recover 统一处理?
yaott2020
2023-10-23 11:50:33 +08:00
@atVoid rust 主要是有个 Result 枚举类型,以及语法糖'?',再加上一些 map_err unwrap_or 函数之类的,go 能做吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/984207

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX