8 вопросов
Строки в Go - это неизменяемые последовательности байт в UTF-8. Понимание разницы между byte и rune критически важно для корректной работы с Unicode и кириллицей.
rune в Go? 🟢 Лёгкий
▶
rune = int32. Представляет Unicode code point - один символ Unicode. Не путать с byte (uint8), который представляет один байт. Кириллическая буква - одна rune, но 2 байта в UTF-8.
Подробнее →len([]rune("Привет"))? 🟡 Средний
▶
Преобразование []rune("Привет") создаёт слайс рун (символов Unicode). Слово «Привет» содержит 6 символов, поэтому len() вернёт 6. Сравните: len("Привет") вернёт 12 (байт).
Подробнее →s[0] = 'A'? 🟢 Лёгкий
▶
Строки в Go иммутабельны (immutable). Нельзя изменить отдельный байт. Чтобы изменить строку, нужно преобразовать её в []byte или []rune, внести изменения и преобразовать обратно в string.
Подробнее →string(65)? 🟡 Средний
▶
string(65) преобразует число (Unicode code point) в строку из одного символа. 65 - это код символа «A» в Unicode/ASCII. Чтобы получить строку "65", нужно использовать strconv.Itoa(65).
Подробнее →for i, c := range "hello"? 🟡 Средний
▶
При итерации по строке через range, i - индекс байта (int), а c - символ типа rune (int32). Go автоматически декодирует UTF-8 и возвращает Unicode code points.
Подробнее →Строки в обратных кавычках - raw string literals. В них не обрабатываются escape-последовательности (\n, \t). Удобно для регулярных выражений, путей, многострочных строк.
Подробнее →strings.Builder использует внутренний буфер и минимизирует аллокации. Оператор + создаёт новую строку при каждой конкатенации (O(n²) по памяти). strings.Builder - идиоматический способ для Go.
Подробнее →strings.Contains("Go is great", "go")? 🟢 Лёгкий
▶
Поиск регистрозависимый. "go" ≠ "Go". Для регистронезависимого поиска используйте strings.Contains(strings.ToLower(s), "go") или strings.EqualFold для сравнения.
Подробнее →