🧵 Strings & Runes в Go
Работа с текстом в Go устроена иначе, чем во многих языках. В этом уроке
мы разберём, как кодируются символы, что такое rune, почему строка -
это байты, и как корректно обходить текст.
🔤 Текст и UTF-8
Go использует UTF-8 как базовую кодировку текста.
- Кодировка - это способ представления символов в виде чисел.
- Все символы мира (буквы, цифры, иероглифы, emoji) перечислены в таблицах - code pages.
- Каждому символу соответствует code point (числовое значение).
🔡 Что такое rune?
Rune - это тип данных для представления одного символа (code point).
rune- псевдоним дляint32- хранит числовое значение символа
- создаётся через одинарные кавычки
'A','😎'
Пример:
var r rune = 'A'
fmt.Println(r) // 65
Вывод символа:
fmt.Printf("%c", r) // A
🧵 Что такое string?
В Go string - это набор байт, а не символов.
Строка содержит: - массив байт, - длину (в байтах), - и не имеет null-терминатора.
Пример:
s := "Привет"
fmt.Println(len(s)) // 12, не 6
🔁 Итерация по строкам
❌ По байтам:
s := "Привет"
for i := 0; i < len(s); i++ {
fmt.Printf("%x ", s[i])
}
✔ По рунам:
for i, r := range "Привет" {
fmt.Printf("%d: %c
", i, r)
}
🧱 Raw string literal
Строки в `, без экранирования:
text := `Hello,
World!
no escaping`
📌 Итоги
Runes
rune = int32- представляют один символ
- пишутся в
' '
Strings
- хранят байты
- UTF-8
- символ ≠ байт
- для символов использовать
range
Raw Literal
- через
` - многострочные
- без экранирования