Перечислите основные типы данных в Go.

Базовые и составные типы Go, псевдонимы byte и rune, назначение uintptr и отличие строки байтов от гарантированно корректного текста UTF-8.

Короткий ответ

Что ответить на собеседовании

В Go есть bool; целочисленные int, uint, типы фиксированной ширины и uintptr; float32/64; complex64/128; string. Также используются массивы, срезы, map, struct, указатели, функции, интерфейсы и каналы. byte — псевдоним uint8, rune — int32. Строка неизменяема и содержит байты, не обязательно корректный UTF-8. uintptr является целым числом, а не обычным указателем.

Подробный разбор

Ответ с пояснениями

Типы удобно перечислять по группам, а затем пояснить несколько важных различий.

Базовые типы:

  • bool со значениями true и false;
  • знаковые целые int, int8, int16, int32, int64;
  • беззнаковые uint, uint8, uint16, uint32, uint64, uintptr;
  • вещественные float32, float64;
  • комплексные complex64, complex128;
  • строки string.

Размер int и uint зависит от реализации и составляет 32 или 64 бита. byte — псевдоним uint8, а rune — псевдоним int32, обычно используемый для кодовых точек Unicode. Это не отдельные новые типы. Правила определены в спецификации Go.

Составные и другие категории включают массивы [N]T, срезы []T, отображения map[K]V, структуры struct, указатели *T, функции func(T) R, интерфейсы и каналы chan T. У каналов можно ограничить направление передачи. Функции являются значениями: их можно сохранять в переменных и передавать аргументами.

Массив имеет длину, входящую в его тип. Срез описывает участок базового массива; это не просто массив без указанной длины. Интерфейс задаёт допустимые операции, а any является псевдонимом пустого интерфейса.

Две частые ловушки: string — неизменяемая последовательность произвольных байтов, не обязательно корректный UTF-8; len(s) считает байты. Это разобрано в материале Go о строках. А uintptr может хранить числовое представление адреса и сам по себе не удерживает объект от сборки мусора; см. документацию unsafe.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку