Основы синтаксиса Строки и руны Массивы и слайсы Map Структуры и методы Интерфейсы Горутины и конкурентность Каналы defer, panic, recover Обработка ошибок Указатели Пакет sync Тестирование Пакеты и модули Стандартная библиотека Context Generics iota и перечисления Разное / продвинутое

Основы синтаксиса

15 вопросов

Фундамент языка Go: типы данных, переменные, константы, операторы и zero values. Эти знания необходимы для написания любой программы на Go и часто встречаются на собеседованиях.

1 Что выведет fmt.Println(len("Привет"))? 🟡 Средний
Ответ: B) 12

Функция len() для строк возвращает количество байт, а не символов. Строки в Go - последовательности байт в UTF-8. Каждая кириллическая буква - 2 байта, поэтому «Привет» (6 букв) = 12 байт.

Подробнее →
2 Какой zero value у типа string? 🟢 Лёгкий
Ответ: B) ""

Каждый тип в Go имеет zero value - значение по умолчанию при объявлении переменной без инициализации. Для string это пустая строка "", не nil (строка - не указатель).

Подробнее →
3 Какой результат: fmt.Println(1 + "1")? 🟢 Лёгкий
Ответ: C) Ошибка компиляции

Go - строго типизированный язык. Нельзя складывать int и string без явного приведения типов. В отличие от JavaScript или Python, Go не выполняет неявных преобразований.

Подробнее →
4 Как объявить константу в Go? 🟢 Лёгкий
Ответ: B) const x = 5

Константы объявляются ключевым словом const. В Go нет let (это JavaScript), define (это C/препроцессор). var объявляет переменную, а не константу.

Подробнее →
5 Какой zero value у типа bool? 🟢 Лёгкий
Ответ: B) false

Zero value для bool - false. Для числовых типов - 0, для строк - "", для указателей - nil.

Подробнее →
6 Какой zero value у типа int? 🟢 Лёгкий
Ответ: C) 0

Числовые типы (int, float64, uint и т.д.) имеют zero value равный 0. Не nil (это для указателей, каналов, слайсов, map, интерфейсов).

Подробнее →
7 Какой zero value у указателя *int? 🟢 Лёгкий
Ответ: B) nil

Указатели, слайсы, map, каналы, интерфейсы и функции имеют zero value равный nil. Указатель *int - не сам int, а ссылка на него, поэтому по умолчанию он nil, а не 0.

Подробнее →
8 Что такое short variable declaration? 🟢 Лёгкий
Ответ: B) x := 5

Оператор := - короткое объявление переменной. Go автоматически определяет тип по правой части. Можно использовать только внутри функций, не на уровне пакета.

Подробнее →
9 Можно ли использовать := на уровне пакета? 🟢 Лёгкий
Ответ: B) Нет

Оператор := работает только внутри функций. На уровне пакета используется var x = 5 или var x int = 5. Это ограничение синтаксиса Go.

Подробнее →
10 Какой результат: fmt.Println(010)? 🟡 Средний
Ответ: B) 8

Литерал 010 - это восьмеричное число (префикс 0). В восьмеричной системе 10 = 1×8 + 0 = 8 в десятичной. Аналогично: 0x10 = 16 (шестнадцатеричное), 0b10 = 2 (двоичное).

Подробнее →
11 Что выведет fmt.Println(true && false)? 🟢 Лёгкий
Ответ: B) false

Оператор && - логическое И. Результат true только когда оба операнда true. true && false = false. Go выводит булевы значения как true/false, не как 1/0.

Подробнее →
12 Какой тип у литерала 3.14 без явного указания? 🟢 Лёгкий
Ответ: B) float64

Go использует float64 как тип по умолчанию для дробных литералов. Если нужен float32, его надо указать явно: var x float32 = 3.14. Типов double и decimal в Go нет.

Подробнее →
13 Что такое blank identifier в Go? 🟢 Лёгкий
Ответ: A) _

Blank identifier _ используется, чтобы игнорировать значение. Например: _, err := someFunc() - первое возвращаемое значение игнорируется. Go не позволяет объявлять неиспользуемые переменные, поэтому _ необходим.

Подробнее →
14 Какой результат: x := 5; x, y := 10, 20; fmt.Println(x, y)? 🟡 Средний
Ответ: B) 10 20

Во второй строке := допустим, потому что y - новая переменная. При этом x просто переприсваивается (не создаётся заново). Правило: в := хотя бы одна переменная должна быть новой.

Подробнее →
15 Какой максимальный размер типа uint8? 🟢 Лёгкий
Ответ: B) 255

uint8 - беззнаковое 8-битное целое. Диапазон: 0–255 (2⁸ − 1). Тип int8 (знаковый) имеет диапазон −128–127. byte - это алиас для uint8.

Подробнее →