Sobes.tech
Back to questions
Senior
1

Какие типы данных в Go являются ссылочными?

Companies where asked
SberAuto

Answer from AI

sobes.tech AI

В Go ссылочными типами данных считаются те, которые хранят указатель на область памяти, а не сами данные. К ним относятся:

  • Указатели (*Type) — хранят адрес значения.
  • Срезы ([]Type) — структура, содержащая указатель на массив, длину и ёмкость.
  • Карты (map) — внутренне реализованы через хеш-таблицу, передаются по ссылке.
  • Каналы (chan) — ссылочный тип для коммуникации между горутинами.
  • Функции — переменные-функции передаются по ссылке.

Например, при передаче среза в функцию копируется структура с указателем, но не копируются сами элементы массива, на который он ссылается. Это позволяет эффективно работать с большими объемами данных без копирования.

func modify(slice []int) {
    slice[0] = 100
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // [100 2 3]
}