логотип PurpleSchool
логотип PurpleSchool

Руны в Go

Автор

Александр Гольцман

Руны в Go — это тип данных, представляющий собой символы Unicode. В Go руну можно рассматривать как синоним для целого числа, которое хранит кодировку символа в стандарте UTF-8. В этой статье я расскажу, что такое руны в Go, как их использовать и чем они отличаются от обычных строк.

Что такое руна?

В языке Go руна — это 32-битное целое число, которое хранит значение символа Unicode. Это не просто символ, как в строках, а полноценная единица, которая может быть использована для представления любого символа из огромной кодировки Unicode, включая буквы, цифры, а также символы различных языков и даже эмодзи.

Смотрите, руна в Go — это тип данных, который мы можем использовать для работы с символами, требующими больше, чем один байт для хранения. Если вы столкнулись с текстами на разных языках или хотите работать с нестандартными символами, руны станут вашим лучшим выбором.

Пример объявления руны:

var r rune = 'a'
fmt.Println(r) // Вывод: 97

Здесь 'a' — это символ, который будет представлен как руна. В примере выводится код символа 97, который соответствует букве "a" в таблице Unicode.

Отличие рун от строк

Важно понимать, что строки и руны в Go — это два разных типа данных. Строки в Go представляют собой последовательность байтов, в то время как руны представляют собой последовательность символов Unicode. Каждая руна в Go — это 32 бита, что позволяет ей хранить все символы в кодировке Unicode.

Преимущество рун заключается в том, что они дают вам доступ к полному набору символов Unicode, включая символы, которые требуют более одного байта. Строки же могут содержать символы только в кодировке UTF-8, что в некоторых случаях может быть не совсем удобно.

Например:

s := "Hello, 世界"
for i, r := range s {
    fmt.Printf("%d: %c\n", i, r)
}

В этом примере мы перебираем строку, которая включает в себя и латинские символы, и китайские иероглифы. Каждый символ будет представлен как руна, и мы можем безопасно работать с любыми символами независимо от их кодировки.

Как работать с рунами?

Работа с рунами в Go часто включает использование встроенных функций и операторов для обработки символов и строк. Например, вы можете легко узнать, является ли символ буквой, цифрой или спецсимволом, с помощью стандартных библиотек.

Преобразование строки в руну

Если вам нужно преобразовать строку в руну, можно использовать цикл range, который автоматически обрабатывает каждый символ строки как руну:

s := "Go is great!"
for _, r := range s {
    fmt.Println(r)
}

Здесь мы выводим каждую руну из строки, и вы увидите, что Go автоматически интерпретирует символы как руны.

Операции с рунами

Работать с рунами можно так же, как с обычными целыми числами. Например, мы можем сравнивать руны, проверять их на равенство или делать математические операции с их значениями.

Пример:

var r1 rune = 'a'
var r2 rune = 'b'

if r1 < r2 {
    fmt.Println("r1 меньше r2")
}

Здесь мы сравниваем две руны и выводим результат в зависимости от их значений.

Заключение

Руны в Go — это мощный инструмент для работы с символами в кодировке Unicode. В отличие от строк, которые представляют собой последовательности байтов, руны позволяют точно работать с символами, независимо от того, сколько байтов требуется для их представления.

Смотрите, если вам нужно обработать текст, содержащий символы, которые занимают более одного байта, или работать с текстами на разных языках, руны будут тем, что вам нужно. Они идеально подходят для таких случаев и обеспечивают большую гибкость при обработке текстовых данных.

Стрелочка влевоSelect в GoРабота с пакетом params в GolangСтрелочка вправо

Все гайды по Golang

Работа с YAML в GolangПреобразование типов в GolangКонвертация структур в JSON в GolangStrconv в GolangИспользование пакета SQLx для работы с базами данных в GolangРазбираемся с SQL в GolangРазделение строк с помощью функции split в GolangSort в GoПоиск и замена строк в Go - GolangИспользование пакета reflect в GolangРабота с PostgreSQL в GoPointers в GolangПарсинг в GoРабота со списками (list) в GolangПреобразование int в string в GolangРабота с числами с плавающей точкой в GolangРабота с полями в GolangИспользование enum в GolangОбработка JSON в GoЧтение и запись CSV-файлов в GolangРабота с cookie в GolangРегистры в GoКэширование данных в GolangПреобразование byte в string в GolangByte в GoИспользование bufio для работы с потоками данных в GolangДобавление данных и элементов (add) в Go
Логирование в Golang. Zap, Logrus, Loki, GrafanaРабота с Docker-контейнерами в GoИспользование pprof в GolangМеханизмы синхронизации в GolangРабота с пакетом S3 в GolangМониторинг Golang приложений с помощью PrometheusОптимизация проектов на GoПаттерны проектирования в GolangМиграции базы данных в GolangОркестрация контейнеров Go с Kubernetes + DockerGjGo Playground и компилятор GolangИспользование go mod init для создания модулей GolangРабота с переменными окружения (env) в GolangКоманда go build в GolangАвтоматизация Golang проектов — CI/CD с GitLab CI и JenkinsОтладка кода в GolangЧтение и использование конфигурации в приложениях на GolangКомпиляция в GolangКак развернуть Go-приложение на облаке AWSАутентификация в Golang
Сетевые протоколы в GoПеременные в GolangЗначения в GolangДженерик %T и его применение в GolangТипы данных в GolangИспользование tls в GolangИспользование tag в структурах GolangSwitch в GoСтроки в GolangРабота с потоками (stream) в GolangSelect в GoРуны в GoРабота с пакетом params в GolangКонвертация строк в числа в GolangNull, Nil, None, 0 в GoНаименования переменных, функций и структур в GoInt в GolangУстановка GolangЧтение и установка HTTP заголовков в GolangMethods в GolangGoLand — IDE для разработки на Golang от JetBrainsОбработка «not found» в GolangFloat в GolangФлаги командной строки в Go (Golang)Запуск внешних команд в GolangОбработка ошибок в GoИспользование defer в GolangЗначения default в GolangГенерация кода в GoФорматирование кода в GolangЧистая архитектура в GolangКаналы (channels) в GolangПолучение body из HTTP запроса в Golang
Открыть базу знаний