> В чем разница между сравнением по ссылке и по значению (Go)
Уровень: middle · Роль: backend · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
В Go разница между сравнением по ссылке и по значению определяется типом данных.
Сравнение по значению происходит для примитивных типов (int, float, bool, string) и структур (struct), если все их поля сравнимы. Оператор == проверяет, равны ли сами данные. Например, две структуры с одинаковыми полями будут равны.
Сравнение по ссылке применяется к указателям, срезам, мапам, каналам и функциям. Здесь == проверяет, указывают ли переменные на одну и ту же область памяти, а не на одинаковое содержимое. Для срезов и мап сравнение напрямую через == запрещено компилятором (кроме сравнения с nil), так как их внутреннее представление включает указатели на данные.
Пример:
GOa := [3]int{1, 2, 3}b := [3]int{1, 2, 3}fmt.Println(a == b) // true - сравнение по значениюc := []int{1, 2, 3}d := []int{1, 2, 3}// fmt.Println(c == d) // ошибка компиляцииfmt.Println(&c == &d) // false - разные адреса в памяти
Ключевой нюанс: в Go нет "сравнения по ссылке" в смысле глубокого сравнения содержимого ссылочных типов. Для этого нужно использовать reflect.DeepEqual или писать свою логику.
> Похожие задачи по backend
Что такое garbage collector и как он работает
Что такое достижимая и недостижимая ссылка в сборщике мусора
Как работает Garbage Collector и что такое минорная сборка мусора
Что такое анонимная функция
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью