Проверяет понимание типа rune в Go, его размера и связи с Unicode.
В языке Go тип rune является встроенным алиасом для типа int32. Он предназначен для представления одного Unicode-символа (кодовой точки). Поскольку Unicode использует до 32 бит для кодирования символов, rune занимает ровно 4 байта (32 бита). Это позволяет хранить любой символ из стандарта Unicode, включая буквы разных алфавитов, иероглифы, математические символы и эмодзи.
Rune всегда занимает 4 байта, независимо от того, какой символ она представляет. Однако при кодировании строк в UTF-8 (стандарт для строк в Go) один символ может занимать от 1 до 4 байт. Например, латинская буква 'A' занимает 1 байт в UTF-8, но rune для неё всё равно будет 4 байта. Это важно понимать для оптимизации памяти.
package main
import "fmt"
func main() {
var r rune = 'Я' // кириллический символ
fmt.Printf("Тип: %T, размер: %d байт\n", r, 4) // rune, 4 байта
// Преобразование строки в срез рун
str := "Привет, мир!"
runes := []rune(str)
fmt.Println(len(runes)) // 12 (количество символов)
fmt.Println(len(str)) // 21 (количество байт в UTF-8)
}Rune используется при работе с текстом, где важна обработка отдельных символов, а не байтов. Например, при подсчёте символов в строке, итерации по Unicode-символам, или при работе с многобайтовыми кодировками. Без rune легко ошибиться, обрабатывая строку как массив байт, что приведёт к некорректному разбиению многобайтовых символов.
Вывод: Rune — это фундаментальный тип для работы с Unicode в Go. Его стоит применять всегда, когда нужно гарантированно обрабатывать отдельные символы, а не просто байты строки. Это особенно актуально для интернационализированных приложений, где текст может содержать символы разных языков.