3

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

 2 years ago
source link: https://www.v2ex.com/t/824287
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  partystart · 2 小时 41 分钟前 · 741 次点击

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

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

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

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

30 条回复    2021-12-24 19:42:09 +08:00

xgfan

xgfan      2 小时 39 分钟前

<del>大道至简</del>🐶

Mexion

Mexion      2 小时 36 分钟前

Wenco

Wenco      2 小时 26 分钟前

不支持重载的语言多了去了,换份 java 工作不好吗

qq8331199

qq8331199      2 小时 24 分钟前   ❤️ 2

不服就别用,别又当又立

useben

useben      2 小时 22 分钟前

这群设计者是学术界呆太久了?
看到这句话就证明你连 go 的背景都没了解清楚....

Mohanson

Mohanson      2 小时 20 分钟前   ❤️ 6

新手骂很正常的.

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

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

当语言设计者做出决定的时候, 一定是正反两方都经过了激烈的较量, 并且其中一方获得了胜利(例如你认为很恶心的 Go 错误处理, 不支持重载等功能). 作为一个学习者, 你应该去了解当时正反两方的观点, 为什么反方会失败, 为什么正方会胜利, 而不是单纯的发泄.

achenme

achenme      2 小时 20 分钟前

代码行数等于工作量证明 狗头~

cmdOptionKana

cmdOptionKana      2 小时 17 分钟前

这两点都是风格问题,你可以不喜欢,这是“偏好”,但你要是讲道理,却很难说这是“错误”。

比如重载,绝大多数情况下重载只是更 implicit 而已,没啥特别好处。

Kasumi20

Kasumi20      2 小时 17 分钟前

这种系统语言一般都不支持重载,因为要做动态库之类的

partystart

partystart      2 小时 17 分钟前

@Mohanson 所以那些吐槽 python 空格符号的人

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

就是单纯的发泄

Leviathann

Leviathann      2 小时 14 分钟前

学术界? Go 几乎忽略了所有现代 PL 研究成果

Mohanson

Mohanson      2 小时 14 分钟前

这里贴一句我很喜欢的话:

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

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


无论是赞同一个设计, 还是反对一个设计, 你一定要能肯定地说: 我了解这个设计背后的取舍. 然后才有资格发表自己的看法.

cmdOptionKana

cmdOptionKana      2 小时 12 分钟前

@partystart 吐槽语言特性,绝大多数都是没搞清楚“偏好”与“错误”。

语言特性的设计,最最主要考虑的因素叫做 trade off, 如果吐槽一个特性只单方面说优点或缺点,那要么就是完全不懂 trade off (约等于完全不懂设计),要么就是懂了但故意装傻带节奏。

cmdOptionKana

cmdOptionKana      2 小时 6 分钟前

@Leviathann Go 不允许重载以及不允许传统的继承(而是选择了 delegation, composition 之类的代码复用机制),正是现代 PL 研究成果,而且 goroutine 直接引领风骚,几乎可以说创造了新的成果,其他语言纷纷效仿。

partystart

partystart      2 小时 6 分钟前

我都已经帮你们想好了怎么圆场了

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

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

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


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

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

只要是人设计的都会有败笔
直接承认不行吗?
java 吹能承认 java 啰嗦
go 吹能承认设计的垃圾吗?

jorneyr

jorneyr      2 小时 4 分钟前

Go 很有意思的:
* 标准库的错误不带 stack ,后来受不了了,在 pkg 的仓库里搞了个带 stack 的 errors
* 开始说泛型怎么怎么样,最后 1.8 开始支持泛型了
* ...
* 很多大家希望,但是 Go 不支持的特性,Go 官方也写了不少文章解释为什么要这么干的合理性,但是慢慢的又把这些特性给加上了
* 网上有不少文章讨论 Go 推翻自己最初自以为傲的特性

partystart

partystart      2 小时 2 分钟前

@jorneyr 问就是大道至简
再问就是诺贝尔获奖者设计 要相信诺贝尔科学家
不行还可以吹谷歌嘛
你这么垃圾能比得上诺贝尔获奖者吗?

诺贝尔科学家发明切小脑治病 海洛因治病
也没见这群 nt 出来说

mainjzb

mainjzb      1 小时 59 分钟前

error 需要向 rust 学习
重载问题不大可以接受

cmdOptionKana

cmdOptionKana      1 小时 58 分钟前   ❤️ 3

@partystart 别人没说你是无脑黑,你就率先说别人“跪舔”、“go 吹”,这种泼妇骂街式的说话方式不好吧?

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

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

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

判断好不好的唯一方法,不就是权衡利弊吗?难道靠占卜吗?

darksword21

darksword21      1 小时 56 分钟前 via iPhone

你去找个 java 的工作不就得了…

ch2

ch2      1 小时 56 分钟前   ❤️ 1

c 里就是这样的,go 只是传承了 c 的解决方法

kiripeng

kiripeng      1 小时 51 分钟前

golang 没有全局覆盖的找 error ,不过这个有个好处,立即处理 golang 的错误,按理说不应该执行下来有错误,然后就是比较恶心的事 panic 不知道在哪,不过可以用 pkg.error %w 得到报错位置和 xx ,或者用 runtime.caller 使用,实在受不了就换个语言

CosimoZi

CosimoZi      1 小时 48 分钟前   ❤️ 1

continuation 多少年前就有的东西, goroutine 包装下变成"引领风骚"的成果了. 最喜欢看 v 站不学无术 go 小将表演了.

kiripeng

kiripeng      1 小时 48 分钟前

@kiripeng 至于范型,现在的方案是 code generation 罢了,牺牲编译时间换取性能

partystart

partystart      1 小时 47 分钟前

@cmdOptionKana

什么叫好 什么叫做不好 谁掌握好的定义?

go 设计团队自己掌握 他们觉得好就是好

至于什么权衡利弊就更搞笑了 是个人就有个偏好 是个团队都有组织特性

go 设计团队要是喜欢用脚敲代码 他们也可以给 go 加这个特性

你回答下为什么之前不支持范型 下一次要支持范型

是不是也是权衡利弊?第一做的决定正确 第二次做的决定肯定也是正确?

go 团队不停的正确?

yulon

yulon      1 小时 46 分钟前

天天吹 Java 序列化格式化,然后写个 log 都能有漏洞是吧

kett

kett      1 小时 43 分钟前

用 Go 写业务确实是麻烦,特别是如果你使用过 java 这种有着成熟生态的语言。

Buges

Buges      1 小时 32 分钟前 via Android

>这群设计者是学术界呆太久了?
恰恰相反,go 常常被批做“民科设计的语言”,因其重复很多古老语言的错误和缺乏现代成熟 pl 理论支持的特性。

sagaxu

sagaxu      45 分钟前 via Android

less is more = design less coding more

masterclock

masterclock      43 分钟前

> 这群设计者是学术界呆太久了?
Go 放弃过去几十年语言界的研究成果,自己再搞一套,典型的 “现在的 XX 太臃肿了,我要做一个小而美的 YY”,最后成为更臃肿更屎山的 ZZ 。

Go1.18 加入了泛型,但是不支持泛型方法,导致无法写出高阶抽象来,还是残废。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK