golang "Ссылочные" типы данных - срезы, хэш-таблицы, каналы. Неявная передача указателя в функции
Primary tabs
Forums:
В golang нет ссылок, но есть указатели, тем не менее, поведение рассматриваемых тут типов очень похоже на поведение "ссылочных типов" в других языках.
К "ссылочным" (условно говоря) типам данных в golang-е можно отнести всё те же:
Это означает, что при передаче значения в функцию даже без явного получения указателя на переменную, по факту всё равно передается указатель и работа производится далее с оригинальным значением до тех пор, пока аргумент-указатель не окажется "переключенным" на другую область памяти
Отличие от ссылочных типов: Когда происходит "переключение" указателя
- При любой переаллокации памяти (типа расширения слайса через append, выходом за вместимость)
- При явном присваивании аргументу функции нового значения уже в теле функции
-- в этих ситуациях поведение указателя отличается от поведения "ссылки", если по ссылке изменился бы оригинальный объект, то тут указатель просто начинает смотреть на новую память, никак не трогая страю (как в ситуации, например, с переаллокацией для срезов)
Дополнительные материалы
- Log in to post comments
- 42 reads