纯吐槽帖 关于 go 的 err 和重载

2021-12-24 17:43:23 +08:00
 partystart

写了几个月的业务了 写 err 真的吐了 牵扯到序列 /反序列话、有任何文件、io 操作的地方都会有 error

报的那么多 error 有啥用? 报那么多 error 没能解决问题 第一行成功 下面的几处 error 第一行的 error 岂不是白打了? 这种与业务无强关联的地方 与业务嵌套这么深 直接全局异常捕捉不就行了?

还有都 21 世纪了 居然不支持重载 输出一样 输入参数不一样 不能重载 就很无语。我写个方法功能一样 还得另外起个名字

这群设计者是学术界呆太久了?

10243 次点击
所在节点    程序员
130 条回复
ffire
2021-12-25 00:18:16 +08:00
“只要是人设计的都会有败笔
直接承认不行吗?”
好大的口气,只是你确定你看出来败笔了。你通篇都是从你个人感受出发来评价一个语言,没看到你有任何正面的,从理论逻辑上讨论说为啥那样不好,或那样更好。不用 Go 的都看不下去了。还是该有个类似 stackexchange 那边“顶踩”的机制,不然这种泼妇骂街似的吐槽语言的贴子都能冒头。还扯到学术界去了,真是无知不嫌丢人啊。
hallDrawnel
2021-12-25 00:27:47 +08:00
每一步处理 error 我觉得很好,尤其是业务逻辑,这样强迫那个人每一步都去检查并作出合理的判断,虽然麻烦,但是后期维护和回溯都很爽。
james122333
2021-12-25 00:37:04 +08:00
你可以都用异常处理 go 的异常处理是比 java 好的 不用整天在函数上 throws 还要因应更动 其它不多说了
FightPig
2021-12-25 02:09:23 +08:00
go 现在有泛型了,看看以后的各种骚写法吧
janxin
2021-12-25 07:43:19 +08:00
err 是个大问题,不过倒不是你说的场景。你需要的处理方式可以用 panic/recover ,反正业务无关不需要关心哪里崩得,只要能回去返回错误即可。

重载不是大问题,只要做好设计重载可以不需要。当然,前提得有泛型。
cassyfar
2021-12-25 08:36:15 +08:00
喷 go 的 err 真的很 low

java 规范的处理错误还得不停 rethrow 呢,错误包裹错误,更麻烦。
lxml
2021-12-25 09:39:53 +08:00
go 泛型这个,唯一能黑的就是 go team 磨磨唧唧,怎么就以讹传讹说 go 反对泛型了。

人家压根没说不搞泛型,只是无法在编译速度、运行速度、简洁性、向下兼容上取得平衡,go 官方都搞出多少套设计了,一直在自我推翻而已。
partystart
2021-12-25 10:37:33 +08:00
@hallDrawnel

数据库的各种问题 你应用层调 sql API 报一大堆 error 有卵用

写一大堆 error 你糊弄鬼呢?

@cassyfar


你是写几行 java 代码就出 exception ? nil exception? index out ?

菜成这样 还是去卖菜吧
cassyfar
2021-12-25 10:57:41 +08:00
@partystart

lol 原来你写的都是些遍历数组的代码 笑死
noparking188
2021-12-25 11:14:17 +08:00
@Kininaru #39 #39 没用过 Golang ,不过感觉这种设计思想和 UNIX/Linux 很像哈,每执行完一次命令都会有状态码返回,标识是否正确执行
MengiNo
2021-12-25 11:17:58 +08:00
喷语言的其实完全可以去写半年 js 和 css 要求兼容 ie 678910 ,就老实了。
agagega
2021-12-25 11:32:47 +08:00
https://onevcat.com/2017/10/swift-error-category/
建议看一下 Swift 是怎么理解错误这个概念然后在语言里用不同的方式实现的
hellodudu86
2021-12-25 12:00:32 +08:00
建议上 boss 搜一下哪个语言工资高选哪个,光喷是没用的
nicebird
2021-12-25 12:02:44 +08:00
可以吐槽,但是也能理解,设计者不是学术界呆久了,而是非常实践。

工程上就是要把不确定消除,重载就是一种不确定性,写的和实际调用的要有一个脑补过程。错误处理是继承 C ,google 非常习惯这种方式,也是 google 工程实践。
golangLover
2021-12-25 12:09:48 +08:00
@nicebird 。。。google 的工程师哪里习惯这种方式。。。
msaionyc
2021-12-25 12:17:55 +08:00
@cassyfar 这也能有优越感吗
Kininaru
2021-12-25 12:33:03 +08:00
@noparking188 #50 是的,确实很像!

Unix 系的返回状态码,和 throw 系的 try catch 体系,我觉得各有各的好处,都挺不错的。

代码风格上我更喜欢 Unix 系状态码,写出来的代码比较好看。每次写 Java ,try catch 都是一小坨,还得缩进,看起来总感觉好别扭。
pmispig
2021-12-25 12:53:03 +08:00
你应该没用 C 写过东西吧,这个 err 和 c 的判断小于 0 差不多
tairan2006
2021-12-25 13:09:36 +08:00
err 设计是不行,但是重载并不是什么问题…

另外 go 显然不是太学术,而是太工程
iyaozhen
2021-12-25 13:09:39 +08:00
go 的 error 是比较烂,但“直接全局异常捕捉不就行了”像 java 那样一个 try catch 到底的(写法)我觉得更烂

“牵扯到序列 /反序列话、有任何文件、io 操作的地方都会有 error” 这个难道不是所有语言都这样?只是别的语言你可以不处理,但怎么说呢,你业务走不下去呀,真的线上出问题哪一步错了都不知道。

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

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

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

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

© 2021 V2EX