Какие знаешь типы, поддерживающие операции сравнения в Golang

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

Ответ

В Go поддерживают сравнение (==, !=) следующие типы:

  • Базовые типы: числа (int, float64 и др.), строки (string), булевы значения (bool).
  • Указатели: сравниваются по адресу.
  • Каналы: сравниваются по ссылке.
  • Интерфейсы: сравниваются по динамическому типу и значению.
  • Структуры и массивы: если все их поля/элементы сравнимы.

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

  • Срезы ([]T), мапы (map[K]V), функции.

Пример:

a := [2]int{1, 2}  
b := [2]int{1, 2}  
fmt.Println(a == b) // true  

c := []int{1, 2}  
d := []int{1, 2}  
// fmt.Println(c == d) // Ошибка: slice can only be compared to nil