再一次看到了 Go 的节制:Int128 类型要不要支持?

开发 后端
如果有看我写的 Rust 系列教程,会注意到,Rust 有一个整数类型:i128/u128,即 16 字节长的整数。而 Go 是不支持 int128/unit128 的。

 [[398601]]

本文转载自微信公众号「polarisxu」,可以通过以下二维码关注。转载本文请联系polarisxu公众号。

大家好,我是站长 polarisxu。

如果有看我写的 Rust 系列教程,会注意到,Rust 有一个整数类型:i128/u128,即 16 字节长的整数。而 Go 是不支持 int128/unit128 的。

当时,我也没有多想,感觉 128 长度应该用的也少。今天,我发现早在 2014 年就有人提议在 Go 中增加 int128/uint128 的支持:https://github.com/golang/go/issues/9455。

为什么想要这个类型呢?

有人提出了相关的使用场景,总结下大概有如下几个:

  • UUID
  • IPv6
  • hashing (MD5)
  • timestamps
  • cryptographic nonces
  • database keys
  • 。。。

针对有人提出的一些需求点,minux(很早期就参与 Go 开发的,华人,go mobile 项目是他主导的)给了如下答复:

大家注意到没,被人 ??。

ianlancetaylor(泛型是他在主导设计)给出了这样的答复:

UUID 和 IP6 的例子不够有说服力,它们很容易用其他方式实现。要不要支持 int128/uint128,关键在于有没有该类型相关的算术运算需求。在具体实现时,硬件是否很好的支持也需要考虑。

如果增加了该类型,strconv、math/big 等包为了兼容,需要增加额外的一些列函数。

他还回复了很多人的其他疑问,他一直强调几点:

  • 你为什么需要 int128/uint128?
  • 是否有做运算的需要?
  • 对语言可能有破坏,因此这个提案标记为 「Go2」

其中他的一句话不少人可能要吐槽:

  • Go is not a language that decides what features to add based solely on demand. Of course demand plays a role, but it is not the determining factor.

Go 是否增加某个特性,需求不是决定因素!

这就是 Go 一直坚持的理念:大道至简!节制!!!有人不喜欢,有人骂,但同样也会有人喜欢,有人爱。对我来说,挺喜欢 Go 的简单,Go 的节制!

最近有人在这个提案接着问:

Rust 支持了,包括 PostgreSQL 数据库也支持,Go 还不支持吗?该提案的作者给出了回复:

闲扯一句:不知道大家看出什么异样了吗?欢迎留言。

最后,int128/uint128 目测迟早应该会支持,因为 ianlancetaylor 在设计泛型时,考虑了对该类型的兼容问题。这个问题我们以后再聊。

 

责任编辑:武晓燕 来源: polarisxu
相关推荐

2016-03-17 13:50:17

融合通信华为

2017-02-28 11:13:36

华为

2021-02-21 09:09:24

GoGOPATH代码

2015-08-07 13:36:49

南京软博会

2012-03-09 15:55:05

新版

2021-03-02 20:42:20

实战策略

2015-05-28 09:58:00

手机电池续航内存

2013-08-23 10:12:02

苹果iPhone 5S

2013-11-29 14:04:42

2012-03-16 14:23:00

框架

2013-08-16 10:12:57

C编程风格

2012-03-16 14:23:00

框架

2017-11-20 09:00:43

跳槽职场精英年终奖

2023-10-06 12:04:41

ORM关系型数据库

2020-04-30 09:24:46

Go项目语言

2015-10-14 13:02:37

ios9越狱

2022-04-26 14:14:32

数字人民币支付数字化

2014-09-24 13:08:35

微信企业号

2017-06-15 08:52:36

数据分析可视化软件开发
点赞
收藏

51CTO技术栈公众号