IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Руны в Golang

В Go руны (rune) — это тип данных, представляющий символ Unicode. По сути, rune — это псевдоним для типа int32, который используется специально для работы с символами Unicode. Давайте разберемся подробнее, что это такое и как с этим работать.


Что такое rune в Go?

  • rune представляет собой кодовую точку Unicode (code point).
  • Кодовая точка — это числовое представление символа в стандарте Unicode. Например:
    • A → кодовая точка 65 (U+0041)
    • → кодовая точка 20320 (U+4F60)
    • 😊 → кодовая точка 128522 (U+1F60A)
  • Тип rune используется для удобной работы с символами, так как строки (string) в Go хранятся как последовательности байт (в кодировке UTF-8), и напрямую работать с символами бывает сложнее.

Почему нужен rune, если есть byte?

  • byte — это псевдоним для uint8 и представляет собой один байт. Но символ Unicode может занимать больше одного байта в UTF-8.
  • rune (или int32) позволяет работать с символами, которые занимают до 4 байт, так как это максимальная длина кодовой точки Unicode.

Пример:

Как работает rune

  1. Инициализация: Руну можно инициализировать через символ или числовую кодовую точку:

     

  2. Приведение строки к рунам: Используйте []rune, чтобы преобразовать строку в срез рун:

     

  3. Итерация по символам строки: Итерация по строке через range автоматически обрабатывает руны:

    Вывод:

     

  4. Работа с отдельными символами: Вы можете преобразовывать руны в строки и обратно:

     

Полезные операции с рунами

  1. Длина строки в символах (рунах):

     

  2. Проверка типа символа: Используйте пакет unicode для работы с символами:

     

  3. Фильтрация строк: Удалим все символы, кроме букв:

     

  4. Сравнение рун:

     

Пакет unicode

Пакет unicode предоставляет множество функций для работы с рунами:

  • Проверки типов символов:
    • unicode.IsLetter(rune) — проверяет, является ли символ буквой.
    • unicode.IsDigit(rune) — проверяет, является ли символ цифрой.
    • unicode.IsSpace(rune) — проверяет, является ли символ пробелом.
  • Регистры:
    • unicode.ToLower(rune) — преобразует в нижний регистр.
    • unicode.ToUpper(rune) — преобразует в верхний регистр.
    • unicode.ToTitle(rune) — преобразует в заглавный регистр.

Кодировка и руны

Go использует UTF-8 для строк, и rune — это удобный способ работы с Unicode. Преобразование между UTF-8 и рунами происходит автоматически:

  • Строка → байты:
     
  • Байты → руны:
     

Пример: поиск уникальных символов

Вот пример программы для подсчета уникальных символов в строке:

Заключение

  • rune — это мощный инструмент для работы с символами Unicode в Go.
  • Он удобен, когда нужно работать с многоязычным текстом, анализировать строки или манипулировать символами.
  • Используйте rune в сочетании с unicode для проверки типов символов, изменения регистра или других операций.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *