Golang: Rune
What is Rune
Rune means Unicode codepoint. (think of it as a character.) It is a jargon golang invented.
A rune is ALL of the following. Which meaning you pick depends on context:
- A integer, with possible values from 0 to 2^32 -1.
- A golang type, with keyword
rune
. It is alias to the typeint32
. [see Golang: Basic Types] - A unicode codepoint.
- A character.
Purpose of Rune
The purpose of rune type is to directly represent one character. It is essentially a character type, just with a fancy name.
What is Codepoint
Unicode gives each character a integer id. This integer id is called codepoint.
Note, some codepoints are non-printable characters. For example, space, newline, tab, right-to-left mark, combining character for accents, etc.
[see Unicode Basics: Character Set, Encoding, UTF-8, Codepoint]
Unicode Standard Notation for Codepoint
Unicode has a standard notation for codepoint, starting with U+
followed by its codepoint in hexadecimal notation. Example:
- space → U+20
- A → U+41
- ♥ → U+2665
- 😂 → U+1F602
Rune Literal
A “rune literal” is a syntax to represent one Unicode character in golang.
Like this:
'c'
,
where the c is 1 single Unicode character. (but may be presented by escape sequence)
All of the following are rune values.
var capA = 'A'
var heart = '♥'
var omg = '😂'
var newline = '\n'
[see Golang: String Backslash Escape]var heart = '\u2665'
same as '♥'var omg = '\U0001F602'
same as '😂'
Print a rune in decimal, hex, and standard unicode notations:
package main import "fmt" func main() { // print a rune in decimal, hex, and standard unicode notations var capA = 'A' fmt.Printf("%d %x %U\n", capA, capA, capA) // 65 41 U+0041 }
Print Rune
Since a rune value is a integer, we can use Printf formats that converts integer to string.
%c
- print character as is (the byte sequence of the character in utf8 encoding.).
%q
-
print in golang rune syntax. Sample output:
'a'
. %U
-
print in Unicode notation. Sample output:
U+03B1
. %d
- print in base 10
%x
- print in base 16, with lower-case letters for a-f
package main import "fmt" // print rune in different formats func main() { var x = '😂' fmt.Printf("%c\n", x) // 😂 fmt.Printf("%q\n", x) // '😂' fmt.Printf("%U\n", x) // U+1F602 fmt.Printf("%b\n", x) // 11111011000000010 fmt.Printf("%o\n", x) // 373002 fmt.Printf("%d\n", x) // 128514 fmt.Printf("%x\n", x) // 1f602 }
Rune Sequence
Value of rune type is just a single char.
For a sequence of chars, you use slice type instead. (Slice is a variable length array.) A slice of rune is common, and can be converted to string.
See:
Reference
The Go Programming Language Specification - The Go Programming Language#String_literals