Какие типы данных являются сравнимыми

«Какие типы данных являются сравнимыми» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go сравнимыми являются типы, которые можно использовать с операторами == и !=:

  1. Базовые типы: bool, числа (int, float64 и др.), string
  2. Указатели: сравниваются по адресу в памяти
  3. Каналы: сравниваются по ссылке
  4. Интерфейсы: сравниваются по динамическому типу и значению
  5. Структуры: если все их поля сравнимы
  6. Массивы: если элементы массива сравнимы

Несравнимые типы:

  • Срезы ([]T)
  • Мапы (map[K]V)
  • Функции

Пример:

a := [2]int{1, 2}  // сравниваемый (массив)
b := []int{1, 2}   // несравнимый (срез)
fmt.Println(a == [2]int{1, 2})  // OK
// fmt.Println(b == []int{1, 2}) // Ошибка компиляции