再一次孤独周普进(再一次爱我)
大家好,我是北极星旭,站长。
如果你读了我写的Rust的教程系列,你会注意到Rust有一个整数类型:i128/u128,它是一个16字节的整数。Go不支持int128/unit128。
当时我也没多想。我觉得128的长度应该少用。今天发现早在2014年就有人提议在Go:https://github.com/golang/go/issues/9455.中加入int128/uint128的支持
你为什么想要这种类型?
有人提出了相关的使用场景,总结如下:
uuidipv6哈希(MD5)timestamp加密临时数据库密钥.针对一些人提出的一些需求点,minux(很早就参与了go开发,他领导了Go移动项目)给出了以下答案:
你注意到了吗?存在。
伊恩兰斯泰勒(泛型是他的主要设计)给出了这个答案:
UUID和IP6的例子不够有说服力。它们可以通过其他方式轻松实现。是否支持int128/uint128取决于是否有与此类型相关的算术运算要求。在具体实现中,硬件是否得到很好的支持也是需要考虑的。
如果添加了这种类型,为了兼容,像strconv、math/big这样的包需要添加一些额外的列函数。
他还回答了很多人的其他问题,他总是强调几点:
为什么需要int128/uint128?有必要做计算吗?语言可能会有损伤,所以这个提议标为“Go2”,很多人可能会想吐槽其中一个:
Go不是一种只根据需求来决定添加哪些功能的语言。需求当然起作用,但不是决定因素。
是否给Go增加某个功能,需求不是决定性因素!
这就是Go一直坚持的理念:简约之路!节制!有人不喜欢,有人骂,但也有人喜欢爱。对我来说,我喜欢围棋的简单和中庸!
最近,有人在这个提案中问:
Rust支持它,包括PostgreSQL数据库。Go不支持吗?提案的作者给出了答复:
八卦:不知道你看奇怪什么?欢迎留言。
最后,迟早应该支持对int128/uint128的可视化检查,因为ianlancetaylor在设计泛型时考虑了这种类型的兼容性。我们以后再谈这个。