rune
в Go — это псевдоним для int32, используемый для представления Unicode-символов (кодовых точек). Каждая rune соответствует одному символу Unicode, независимо от того, сколько байт этот символ занимает в UTF-8.
var r rune = 'A' // Это эквивалентно var r int32 = 65
'ф'
, '🍎'
s := "Привет, 世界!"
for _, r := range s { // r имеет тип rune
fmt.Printf("%c ", r)
}
// Вывод: П р и в е т , 世 界 !
emoji := '😊'
fmt.Println(emoji) // Выведет: 128522
fmt.Printf("%c\n", emoji) // Выведет: 😊
str := "日本語"
runes := []rune(str) // Преобразование строки в срез рун
Характеристика | rune (int32) | byte (uint8) |
---|---|---|
Размер | 4 байта | 1 байт |
Диапазон | Любые символы Unicode | Только ASCII (0-255) |
Использование | Unicode-текст | Бинарные данные |
func CountChars(s string) int {
return len([]rune(s))
}
fmt.Println(CountChars("Привет")) // 6, а не 12 как len(s)
func IsLetter(r rune) bool {
return unicode.IsLetter(r)
}
fmt.Println(IsLetter('A')) // true
fmt.Println(IsLetter('你')) // true (китайский иероглиф)
Итерация по строке:
for i, r := range "日本語" {
fmt.Printf("%d: %c\n", i, r)
}
Сравнение рун:
if r1 == r2 {
// сравнение кодовых точек
}
Конверсия типов:
var r rune = '世'
var i32 int32 = r // Безопасное преобразование
rune
— это int32, представляющий Unicode-символ