В этом уроке мы разберём, как Go работает со строками, рунами и UTF-8. Что такое rune, почему строки хранятся как байты, и как правильно итерировать символы. Разберём разницу между обычными строками, байтами и raw literals.
Работа с текстом в Go устроена иначе, чем во многих языках. В этом уроке
мы разберём, как кодируются символы, что такое rune, почему строка -
это байты, и как корректно обходить текст.
Go использует UTF-8 как базовую кодировку текста.
Rune - это тип данных для представления одного символа (code point).
rune - псевдоним для int32'A', '😎'Пример:
var r rune = 'A'
fmt.Println(r) // 65
Вывод символа:
fmt.Printf("%c
", r) // A
В 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)
}
Строки в `, без экранирования:
text := `Hello,
World!
no escaping`
rune = int32' 'range`