rune型とは
int32のエイリアス型で、Unicodeのコードポイントを表す。
Unicodeは符号化文字集合や、文字符号化方式などを定めた文字コードの標準規格で、世界の多様な言語や書式、記号に番号を割り当てたもの。
符号化文字集合とは、コンピューター上で扱う文字や記号を重複しないように集めた文字セットのことであり、文字と文字に割り当てられた番号の対応表を指す。文字符号化方式は、文字に割り当てられた番号とコンピューターが扱うデータ形式を指す。
ex. 符号化文字集合:Unicode、符号化形式:UTF-8
Unicodeなどに割り当てられた番号をコードポイントと呼び、rune型はこのコードポイントを表すための型となる。
例えばUnicode U+0041(16進数では0041)は、基本ラテン文字に分類される文字'A'のコードポイントであり、rune型で表すと、次のようになる。
int32型の65という数字は、0041の10進数表記したものであり、Unicodeのコードポイントを表している。
string型とrune型
Goではstring型は読み取り専用のbyteのスライスである。
string型はrune型と異なり、コードポイントを保持しているわけではない。
string型はループの仕方によって挙動が異なる。
マルチバイトを扱う場合はループの挙動に注意を払う必要がある。
日本語1文字は3バイトであるため、rangeを使わないループの場合は、1文字であっても3回ループが回る。
文字列数を取得するときもstring型がバイトのスライスであることに注意を払う。
lenはバイト長を返すため、文字数を取得したい場合はutf8.RuneCountInStringを使う。