Использует ли язык Go копирование при записи для строк - PullRequest
3 голосов
/ 16 декабря 2011

Использует ли язык Go копирование при записи для строк, как в Java? То есть если я передам строку по значению методу и никогда не изменю его, это выделит память и скопирует строку (что будет неэффективно по времени), или она просто будет ссылаться на одну копию.

Ответы [ 2 ]

17 голосов
/ 16 декабря 2011

Это не копирование при записи, поскольку строки неизменяемы. Но совместное использование строки также не сделает копию основной области памяти. В Go строка представляется в виде пары (длина, данные). Если вы передадите строку, Go скопирует длину и указатель, но не данные, на которые указывает.

Для получения дополнительной информации см. эту недавнюю тему о golang-nuts .

2 голосов
/ 16 декабря 2011

Тип перехода string практически эквивалентен java.lang.String. Эти две реализации (во время выполнения Go, в JVM) также похожи, хотя они не идентичны. В плане передачи аргументов функциям и методам производительность строк Go аналогична строкам Java.

...