If you are making a Go network application that works with databases and/or javascript, you need to be careful when using the rune data type.
For example, PostgreSQL does not have a data type that matches rune; There are options for storing rune:
- store in
CHAR(1)– then you will need to convert every time you unload from the database like this:[]rune(symbolStr)[0] - store in
BYTEA; unload via w….make([]byte, 4) - or a slightly less obvious variant – store in the database as
INT; which is the most relevant.
Plus… Javascript can’t handle runes either. I have to render the output like this: String.fromCharCode(.Icon);
By the way… It’s funny, not all emoji (unicode characters like ) can be stored in rune. Because some of them exceed the size of rune, because they use an extra Unicode selector:
- “🏘️” houses (U+1F3D8 U+FE0F)
- “⛰️” mountain (U+26F0 U+FE0F)
- “🏔️” mountain with snow (U+1F3D4 U+FE0F)
And it’s not just emoji, but just some basic Unicode characters.
So you have to be careful with rune.
Runes are probably designed to store the original 32bit Unicode value.
If you talk about UTF-8 transformed strings, then you need to deal with 2 or even 3 “characters” (bytes) for a single emoji.