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