Язык Go. Про руны (тип данных), PostgreSQL и JS


Если вы делаете на Go сетевое приложение, которое работает с базами данных и/или javascript — нужно быть аккуратным при использовании типа данных rune.

К примеру, в PostgreSQL нет типа данных, который соответствует rune; там такие варианты хранение rune:

  1. хранить в CHAR(1) — тогда нужно будет каждый раз конвертировать при выгрузке из БД вот так: []rune(symbolStr)[0]
  2. хранить в BYTEA; выгружать через ж…. make([]byte, 4)
  3. или же несколько менее очевидный вариант — хранить в БД в виде INT; что наиболее релевантно.

Плюс… Javascript тоже не умеет работать с рунами. Приходится приводить вывод вот так: String.fromCharCode(.Icon);

Кстати… Забавно, что далеко не все emoji (unicode символы вроде 🐻) можно хранить в rune. Потому что некоторые из них превышают размер rune, т.к. используют дополнительный (т.н. вариативный) селектор Unicode:

  • «🏘️» дома (U+1F3D8 U+FE0F)
  • «⛰️» гора (U+26F0 U+FE0F)
  • «🏔️» гора со снегом (U+1F3D4 U+FE0F)

И это не только emoji, но и просто некоторые базовые символы Unicode.

Так что с rune надо быть аккуратным..


Запись опубликована в рубрике Go. Добавьте в закладки постоянную ссылку.

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

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.