Проверяет знание базовых типов данных в Go, в частности типа rune для работы с Unicode-символами.
В языке Go тип rune используется для представления одного Unicode-символа. Технически это алиас для типа int32, то есть 32-битное целое число, которое хранит кодовую точку символа в стандарте Unicode. Например, символ 'A' имеет код 65, а символ '😀' — код 128512.
Важно понимать разницу между byte и rune: byte — это алиас для uint8 и используется для работы с байтами (например, при чтении файлов), а rune — для работы с символами. Строки в Go — это последовательности байтов, поэтому при итерации по строке вы получаете байты, а не символы. Чтобы получить символы, нужно преобразовать строку в срез рун.
package main
import "fmt"
func main() {
str := "Привет, мир!"
// Итерация по байтам
for i := 0; i < len(str); i++ {
fmt.Printf("%x ", str[i])
}
fmt.Println()
// Итерация по рунам
for _, r := range str {
fmt.Printf("%c ", r)
}
fmt.Println()
// Преобразование в срез рун
runes := []rune(str)
fmt.Println("Длина в рунах:", len(runes))
}В этом примере первый цикл выводит байты строки (их будет больше, чем символов, так как кириллица занимает 2 байта на символ), а второй цикл корректно выводит каждый символ. Преобразование в срез рун позволяет получить точное количество символов в строке.
Тип rune широко используется при обработке текста: парсинге строк, работе с регулярными выражениями, реализации алгоритмов поиска и сортировки строк с учётом Unicode. Он также полезен при разработке интернационализированных приложений, где нужно корректно обрабатывать символы разных языков.
Итог: Используйте rune в Go, когда вам нужно работать с отдельными символами Unicode, а не с байтами. Это обеспечивает корректную обработку многоязычного текста и упрощает манипуляции с символами.