Dev Study
Go コース

10. 文字列と rune — UTF-8 とバイト・文字の違い

Go の string は UTF-8 でエンコードされたバイト列です。len(s) は文字列の「バイト数」を返すので、ASCII 文字だけなら文字数と一致しますが、日本語のようなマルチバイト文字を含むと文字数とは異なります。たとえば「あ」は UTF-8 で 3 バイトを占めるため、文字列「あ」の len は 3 になります。

1 文字(コードポイント)を表す型が rune です。rune は int32 の別名で、Unicode の 1 文字を整数で表します。文字列を文字単位で扱いたいときは、[]rune(s) のようにルーンのスライスへ変換すると、len で本当の文字数が得られます。range で文字列を回す場合も、各反復で rune が取り出されます。

つまり「バイトとして見るか、文字として見るか」で結果が変わる、というのが Go の文字列の要点です。下のコードで、同じ文字列でもバイト数と文字数が異なることを確かめてみてください。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗