Обработка символов в Go
В синтаксисе языка программирования Go используют ряд символов для структурирования кода и записи операций.
Символы препинания и разделители
Следующие символы помогают организовать блоки кода, разделять элементы и определять типы:
- круглые скобки () — вызывают функцию, группируют выражение, приводят типы, задают условие цикла;
- фигурные скобки {} — определяют блок кода (например, тела функции, оператора if, for, switch), задают составной литерал структуры, задают отображение;
- квадратные скобки [ ] — определяют массив и срез, индексируют отображение;
- запятая (,) — разделяет идентификаторы, параметры, аргументы и значения в списках;
- точка с запятой (;) — завершает операторы;
- точка (.) — предоставляет доступ к полям структур, вызывает методы, отделяет имена пакетов от их содержимого (например, fmt.Println);
- двоеточие (:) — отделяет метку от оператора (:=) и часть оператора краткого объявления переменной;
- многоточие (…) — применяют в сигнатурах вариативных функций (func(s …string)) и в определениях типов массивов ([…]int{});
- обратные кавычки (`) — определяют необработанные строковые литералы, которые занимают несколько строк и содержат неинтерпретируемые экранируемые последовательности символов.
Операторы
Язык программирования Go включает стандартные арифметические, логические, побитовые операторы, а также операторы сравнения.
Арифметические операторы
Символы арифметических операторов:
- плюс (+) — обозначает сложение, конкатенацию строк;
- дефис (-) — обозначает вычитание;
- звёздочка (*) — обозначает умножение, определяет тип указателя, отменяет имя указателя;
- косая черта (/) — обозначает деление;
- процент (%) — обозначает модуль (остаток);
- комбинация амперсанда и акцента (&^) — обозначает побитовую очистку (AND NOT).
Операторы присваивания и объявления
Символы операторов присваивания и объявления:
- равенство (=) — обозначает присваивание значения переменной;
- двоеточие и равенство (:=) — обозначает краткое объявление переменной и присваивание значения переменной (выводит тип);
- комбинация знаков плюс и равенство (+=), дефис равенство (-=) — обозначает составные операторы присваивания значений;
- два знака плюса (++) — обозначают инкремент (увеличение);
- два знака дефиса (–) — обозначают декремент (уменьшение).
Операторы сравнения
Символы операторов сравнения:
- два знака равенства (==) — обозначают сравнение на эквивалентность;
- комбинация восклицательного знака и равенства (!=) — обозначает сравнение на неэквивалентность;
- знак меньше (<) — обозначает выявление меньшего;
- знак больше (>) — обозначает выявления большего;
- сочетание знаков меньше и равенство (<=) — обозначают выявление меньшего или эквивалентного;
- сочетание знаков больше и равенство (<=) — обозначают выявление большего или эквивалентного;
Логические операторы
Символы логических операторов:
- два амперсанда (&&) — обозначают конъюнкцию (И, AND);
- две вертикальные черты (||) — обозначают дизъюнкцию (ИЛИ, OR);
- восклицательный знак (!) — обозначают отрицание (НЕ, NOT);
Побитовые операторы
Символы побитовых операторов:
- амперсанд (&) — обозначает побитовую конъюнкцию (И, AND);
- акцент (^) — обозначает побитовую исключающую дизъюнкцию (ИЛИ, XOR);
- два знака меньше (<<) — обозначают побитовый сдвиг влево;
- два знака больше (>>) — обозначают побитовый сдвиг вправо;
- сочетание знака меньше и дефиса (<-) — обозначают передачу и приём данных по каналу (оператор канала).
Комментарии
Символы комментариев:
- две косые черты (//) — обозначают комментарий в одну строку;
- комбинация символов (/* */) — обозначает комментарий в несколько строк.
Библиотека обработки символов
При написании программных кодов, метаданных, файлов настроек приложений необходимо корректно преобразовывать регистры, осуществлять декомпозицию и нормализацию символов Юникода.
Большинство языков программирования имеют стандартный набор процедур обработки символов в кодировке UTF-8. Некоторые языки в явной форме, а некоторые в неявной синхронизируют свои процедуры с проектом International Components for Unicode (ICU).
В языке программирования Go существует собственный мощный пакет golang.org/x/text для обработки текста в Юникоде. В частности golang.org/x/text предлагает пакеты:
- cases: для преобразования регистра и изменения регистра заголовков, часто с правилами, зависящими от локали;
- language: для определения языка и обработки локали;
- currency: для форматирования валюты;
- message: для форматирования и перевода сообщений;
- unicode: для низкоуровневых операций с Unicode, нормализации.
При этом существует библиотека icu4c, позволяющая приложениям Go использовать обширные возможности ICU.
Для приложений Веба существует подход WebAssembly (Wasm) с библиотекой wazero. Например, проект dolthub/go-icu-regex компилирует все необходимые возможности в модуль WebAssembly и выполняют его в среде Go wazero.
Выбор между вариантами зависит от конкретного проекта. Если нужны все возможности и функции ICU, то целесообразно использовать icu4go или подход WebAssembly. Для частных решений лучше использовать нативную для Go библиотеку golang.org/x/text.