четверг, 14 февраля 2019 г.

Go FAQ: Когда параметры функции передаются по значению?

Как и во всех языках семейства C, все в Go передается по значению. То есть функция всегда получает копию передаваемого параметра, как если бы был оператор присваивания, присваивающий значение параметра. Например, передача значения int в функцию делает копию int, а передача указателя значения создает копию указателя, но не данных, на которые он указывает.

Значения карты и среза ведут себя как указатели: они являются дескрипторами, которые содержат указатели на базовую карту или данные среза. Копирование карты или значения среза не копирует данные, на которые оно указывает. Копирование значения интерфейса делает копию вещи, сохраненной в значении интерфейса. Если значение интерфейса содержит структуру, копирование значения интерфейса делает копию структуры. Если значение интерфейса содержит указатель, копирование значения интерфейса делает копию указателя, но опять же не данных, на которые он указывает.

Обратите внимание, что это обсуждение о семантике операций. Фактические реализации могут применять оптимизации, чтобы избежать копирования до тех пор, пока оптимизации не меняют семантику.


Читайте также:


Комментариев нет:

Отправить комментарий