Go语言是否使用Copy-on-write作为字符串

时间:2011-12-16 09:26:05

标签: string go copy-on-write

Go语言是否像Java一样使用Copy-on-write作为字符串?即如果我按值将一个字符串传递给一个方法并且永远不会改变它,那么这将分配内存并复制字符串(这将是时间效率低下的),或者它只引用一个副本。

2 个答案:

答案 0 :(得分:17)

它不是Copy-on-Write,因为字符串是不可变的。但共享一个字符串也不会复制底层内存区域。在Go中,字符串表示为(长度,数据)对。如果你传递一个字符串,Go将复制长度和指针,但不复制指向的数据。

有关详细信息,请参阅this recent thread on golang-nuts

答案 1 :(得分:2)

Go type string实际上等同于java.lang.String。这两个实现(在Go运行时,在JVM中)也是类似的,尽管它们不相同。在向函数和方法传递参数方面,Go字符串的性能类似于Java字符串。