> Какие типы данных относятся к мутабельным, а какие к немутируемым (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Астра

Стек: Go

> Пример ответа

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

Немутабельные (неизменяемые) типы:

  • Строки (string) - при любом изменении (конкатенация, замена символа) создаётся новая строка, исходная остаётся неизменной.
  • Числовые типы (int, float64, byte и др.) - операции возвращают новое значение, исходное не меняется.
  • Булев тип (bool) - аналогично.
  • Указатели (pointer) - сам указатель (адрес) не меняется, но данные по адресу могут быть мутабельны.

Мутабельные (изменяемые) типы:

  • Срезы (slice) - можно изменить элементы по индексу, а также через append (хотя это может привести к созданию нового underlying array).
  • Карты (map) - добавление, удаление и изменение элементов происходит "на месте".
  • Каналы (chan) - можно отправлять и получать данные, меняя их состояние.
  • Структуры (struct) - если поля доступны для записи, их можно изменить через указатель или если структура присвоена переменной (не константе).
  • Массивы (array) - хотя в Go массивы передаются по значению, их элементы можно менять, если массив не является константой.

Важно: В Go нет иммутабельных коллекций "из коробки". Все мутабельные типы изменяются по ссылке (срезы, мапы) или по значению (структуры, массивы), но при передаче в функцию изменения не всегда отражаются на оригинале (например, для структур без указателя).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью