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

Строки и руны

8 вопросов

Строки в Go - это неизменяемые последовательности байт в UTF-8. Понимание разницы между byte и rune критически важно для корректной работы с Unicode и кириллицей.

1 Что такое rune в Go? 🟢 Лёгкий
Ответ: B) Алиас для int32

rune = int32. Представляет Unicode code point - один символ Unicode. Не путать с byte (uint8), который представляет один байт. Кириллическая буква - одна rune, но 2 байта в UTF-8.

Подробнее →
2 Что вернёт len([]rune("Привет"))? 🟡 Средний
Ответ: B) 6

Преобразование []rune("Привет") создаёт слайс рун (символов Unicode). Слово «Привет» содержит 6 символов, поэтому len() вернёт 6. Сравните: len("Привет") вернёт 12 (байт).

Подробнее →
3 Можно ли изменить символ строки по индексу: s[0] = 'A'? 🟢 Лёгкий
Ответ: B) Нет, строки неизменяемы

Строки в Go иммутабельны (immutable). Нельзя изменить отдельный байт. Чтобы изменить строку, нужно преобразовать её в []byte или []rune, внести изменения и преобразовать обратно в string.

Подробнее →
4 Что вернёт string(65)? 🟡 Средний
Ответ: B) "A"

string(65) преобразует число (Unicode code point) в строку из одного символа. 65 - это код символа «A» в Unicode/ASCII. Чтобы получить строку "65", нужно использовать strconv.Itoa(65).

Подробнее →
5 Какой тип у элемента при итерации for i, c := range "hello"? 🟡 Средний
Ответ: B) rune

При итерации по строке через range, i - индекс байта (int), а c - символ типа rune (int32). Go автоматически декодирует UTF-8 и возвращает Unicode code points.

Подробнее →
6 Что такое raw string literal в Go? 🟢 Лёгкий
Ответ: B) `hello`

Строки в обратных кавычках - raw string literals. В них не обрабатываются escape-последовательности (\n, \t). Удобно для регулярных выражений, путей, многострочных строк.

Подробнее →
7 Как эффективно склеить много строк? 🟡 Средний
Ответ: B) strings.Builder

strings.Builder использует внутренний буфер и минимизирует аллокации. Оператор + создаёт новую строку при каждой конкатенации (O(n²) по памяти). strings.Builder - идиоматический способ для Go.

Подробнее →
8 Что вернёт strings.Contains("Go is great", "go")? 🟢 Лёгкий
Ответ: B) false

Поиск регистрозависимый. "go" ≠ "Go". Для регистронезависимого поиска используйте strings.Contains(strings.ToLower(s), "go") или strings.EqualFold для сравнения.

Подробнее →