❗ Вебсайт в стадии бета-тестирования. Возможны ошибки.

Обработка символов в 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.