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

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

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

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

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

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

9385 次点击
所在节点    程序员
130 条回复
6IbA2bj5ip3tK49j
2021-12-24 17:45:50 +08:00
<del>大道至简</del>🐶
Mexion
2021-12-24 17:48:57 +08:00
确实
Wenco
2021-12-24 17:58:27 +08:00
不支持重载的语言多了去了,换份 java 工作不好吗
qq8331199
2021-12-24 18:00:24 +08:00
不服就别用,别又当又立
useben
2021-12-24 18:03:04 +08:00
这群设计者是学术界呆太久了?
看到这句话就证明你连 go 的背景都没了解清楚....
Mohanson
2021-12-24 18:05:05 +08:00
新手骂很正常的.

对于第一点, go 是有你认为的全局异常捕捉的, 叫做 panic. 一部分语言不区分异常和错误, 一部分语言会区分, 如果你之前没有写过区分异常和错误的语言, 那么切换到 go 会非常不适应. 这点我在最初学习 Go 的时候也骂过, 因为我之前写的较多的是 Java 和 Python. 如果你是从 C 转, 那这种设计就会认为是理所当然的.

至于重载, CPP 社区观点就是分裂的, 后来的新语言大多数都认为是个坏设计(rust 和 go 举例), 因为其会带来"二义性". **所以问题不是“为什么 Rust 和 Go 不支持函数重载”,而是为什么要允许 Rust 和 Go 支持函数重载?只有在有正当理由的情况下,才能添加一个功能**. 但我们知道, 这两门语言在没有这个功能的情况下工作的很好, 创造了许多伟大的程序. (比如大多数 Go 反对者: 为什么 A 语言有这个设计而 Go 没有, 这就不是一个正当理由

当语言设计者做出决定的时候, 一定是正反两方都经过了激烈的较量, 并且其中一方获得了胜利(例如你认为很恶心的 Go 错误处理, 不支持重载等功能). 作为一个学习者, 你应该去了解当时正反两方的观点, 为什么反方会失败, 为什么正方会胜利, 而不是单纯的发泄.
achenme
2021-12-24 18:05:08 +08:00
代码行数等于工作量证明 狗头~
cmdOptionKana
2021-12-24 18:07:27 +08:00
这两点都是风格问题,你可以不喜欢,这是“偏好”,但你要是讲道理,却很难说这是“错误”。

比如重载,绝大多数情况下重载只是更 implicit 而已,没啥特别好处。
Kasumi20
2021-12-24 18:07:46 +08:00
这种系统语言一般都不支持重载,因为要做动态库之类的
partystart
2021-12-24 18:08:03 +08:00
@Mohanson 所以那些吐槽 python 空格符号的人

肯定是没有思考过为什么这么设计

就是单纯的发泄
Leviathann
2021-12-24 18:10:16 +08:00
学术界? Go 几乎忽略了所有现代 PL 研究成果
Mohanson
2021-12-24 18:11:03 +08:00
这里贴一句我很喜欢的话:

```
在你说出 "我同意", "我不同意", 或 "我暂缓评论" 之前, 你一定要能肯定地说: "我了解了."

同意对方说法, 与不同意对方说法都一样要花心力来作判断的. 同意或不同意都有可能对, 也有可能不对. 毫无理解便同意只是愚蠢, 还不清楚便不同意也是无礼.
```


无论是赞同一个设计, 还是反对一个设计, 你一定要能肯定地说: 我了解这个设计背后的取舍. 然后才有资格发表自己的看法.
cmdOptionKana
2021-12-24 18:12:13 +08:00
@partystart 吐槽语言特性,绝大多数都是没搞清楚“偏好”与“错误”。

语言特性的设计,最最主要考虑的因素叫做 trade off, 如果吐槽一个特性只单方面说优点或缺点,那要么就是完全不懂 trade off (约等于完全不懂设计),要么就是懂了但故意装傻带节奏。
cmdOptionKana
2021-12-24 18:18:50 +08:00
@Leviathann Go 不允许重载以及不允许传统的继承(而是选择了 delegation, composition 之类的代码复用机制),正是现代 PL 研究成果,而且 goroutine 直接引领风骚,几乎可以说创造了新的成果,其他语言纷纷效仿。
partystart
2021-12-24 18:18:54 +08:00
我都已经帮你们想好了怎么圆场了

为什么这么设计呢
回答一律都是大道至简

那为什么在 1.18 里面添加范型呢?
请问是不是又是大道至简?

能别跪舔吗?
好就是好 不好就是不好
哪来的那么多权衡利弊 少给自己加戏了行吗?


python 反人类缩进符
c++冗余到创始人都不敢说自己掌握了
java 啰里八嗦的继承划分
php 函数命名混乱

是不是也要吹出一个 123 来?

只要是人设计的都会有败笔
直接承认不行吗?
java 吹能承认 java 啰嗦
go 吹能承认设计的垃圾吗?
jorneyr
2021-12-24 18:20:22 +08:00
Go 很有意思的:
* 标准库的错误不带 stack ,后来受不了了,在 pkg 的仓库里搞了个带 stack 的 errors
* 开始说泛型怎么怎么样,最后 1.8 开始支持泛型了
* ...
* 很多大家希望,但是 Go 不支持的特性,Go 官方也写了不少文章解释为什么要这么干的合理性,但是慢慢的又把这些特性给加上了
* 网上有不少文章讨论 Go 推翻自己最初自以为傲的特性
partystart
2021-12-24 18:22:54 +08:00
@jorneyr 问就是大道至简
再问就是诺贝尔获奖者设计 要相信诺贝尔科学家
不行还可以吹谷歌嘛
你这么垃圾能比得上诺贝尔获奖者吗?

诺贝尔科学家发明切小脑治病 海洛因治病
也没见这群 nt 出来说
mainjzb
2021-12-24 18:25:26 +08:00
error 需要向 rust 学习
重载问题不大可以接受
cmdOptionKana
2021-12-24 18:26:34 +08:00
@partystart 别人没说你是无脑黑,你就率先说别人“跪舔”、“go 吹”,这种泼妇骂街式的说话方式不好吧?

而且你的逻辑也不是一般的混乱,你说:

“好就是好 不好就是不好,哪来的那么多权衡利弊”

你说说,不权衡利弊就能判断好不好?

判断好不好的唯一方法,不就是权衡利弊吗?难道靠占卜吗?
darksword21
2021-12-24 18:28:29 +08:00
你去找个 java 的工作不就得了…

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

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

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

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

© 2021 V2EX