> Какие типы данных относятся к мутабельным, а какие к немутируемым (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Астра
Стек: Go
> Пример ответа
В Go мутабельность (изменяемость) типов данных определяется тем, можно ли изменить их содержимое после создания без переприсваивания переменной.
Немутабельные (неизменяемые) типы:
- Строки (
string) - при любом изменении (конкатенация, замена символа) создаётся новая строка, исходная остаётся неизменной. - Числовые типы (
int,float64,byteи др.) - операции возвращают новое значение, исходное не меняется. - Булев тип (
bool) - аналогично. - Указатели (
pointer) - сам указатель (адрес) не меняется, но данные по адресу могут быть мутабельны.
Мутабельные (изменяемые) типы:
- Срезы (
slice) - можно изменить элементы по индексу, а также черезappend(хотя это может привести к созданию нового underlying array). - Карты (
map) - добавление, удаление и изменение элементов происходит "на месте". - Каналы (
chan) - можно отправлять и получать данные, меняя их состояние. - Структуры (
struct) - если поля доступны для записи, их можно изменить через указатель или если структура присвоена переменной (не константе). - Массивы (
array) - хотя в Go массивы передаются по значению, их элементы можно менять, если массив не является константой.
Важно: В Go нет иммутабельных коллекций "из коробки". Все мутабельные типы изменяются по ссылке (срезы, мапы) или по значению (структуры, массивы), но при передаче в функцию изменения не всегда отражаются на оригинале (например, для структур без указателя).
> Похожие задачи по backend
Можно ли расхэшировать объект
Можно ли объявить поле так, чтобы оно было примитивом после компиляции
Происходит ли копирование данных при передаче слайса и массива в функцию в Go
Какие сигналы существуют в операционной системе
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью