在Google Go中,我读到字符串是不可变的,但是int是吗? 其他类型呢?作为一个稍微老一点的程序员,我更喜欢可变性,即使我知道不变性的好处,但我宁愿过着危险的生活。哪些类型在Google Go语言中可变且不可变?
知道什么类型是可变的或不可变的将是非常有益的。
更新,我最关心的是实际问题取决于类型是可变的或不可变的。正如Java中的典型例子,如果您在循环中创建一个字符串并循环10,000次,您将获得10,000个字符串的创建,然后再进行垃圾收集。这实际上是我所在公司的一个项目中的一个严重问题。
问题是,在某些情况下Go的不变性会导致同样的问题吗?
它影响你应该如何对待变种。 (或者我假设它)。
再次更新,我也关心其他实际问题。知道某些东西是不可变的,意味着我可以编写并行的代码,并且更新对象的一个引用不应该更新其他引用。不过有时候我想做危险的事情,我想要可变性。
这些是可变性与不可变性的后果,并影响我如何编写代码。
我问这个问题的原因是这是一个性能问题,如果我正在编写一个循环运行数百万次,我不想创建大量对象。例如,在Java循环中,我们不希望每次循环都创建一个字符串,所以我们使用StringBuffer。 – Phil
我的假设当然是不可变的类型将会创建大量的对象。 (可能并非如此,具体取决于分配器) – Phil
在某种程度上,因为极其聪明的垃圾回收器可能会重复使用字符串*片段*,您会留下一些聪明的东西(除了连续的单词阵列之外的任何东西)实现。使用'[]字节'然后,注意在全面的utf-8 *字符*(又名符文)具有可变长度。 – ypb