golang rune型の使い方と注意点
今回はgolangのrune型について解説していきます。
rune型
Go言語におけるrune型は、Unicodeのコードポイントを表すための型です。runeはint32型のエイリアスとして定義されており、Unicode文字を1文字単位で扱う際に使用されます。
rune型の使い方
単一の文字を表す
文字リテラルを使ってrune値を直接指定することができます。
var a rune = 'a'
var heart rune = '♥'
fmt.Println(a, heart)
この出力結果は97 9829となります。
文字列からruneへのアクセス
Goの文字列はバイトスライスとして扱われますが、for rangeループを使用することで、文字列内の各文字に対してruneとしてアクセスできます。
s := "Hello, 世界"
for _, r := range s {
fmt.Printf("%c ", r)
}
この出力結果はH e l l o , 世 界となります。
runeスライスとしての文字列操作
文字列をruneのスライスに変換することで、Unicode文字を正確に数えたり操作したりできます。
s := "Go言語"
runes := []rune(s)
fmt.Println(len(runes))
この出力結果は3となります。
rune型の注意点
マルチバイト文字の扱い
Goの文字列はUTF-8でエンコードされており、すべてのUnicode文字が1バイトで表されるわけではありません。
そのためlen関数を使って文字列の長さを取得すると、バイト数が返されますが、runeの数とは異なる場合があります。
インデックスアクセスの問題
文字列の特定のインデックスにアクセスするとき、バイト単位でのアクセスになるため、マルチバイト文字の中途半端な場所でアクセスすると不正なデータが得られます。
文字単位でアクセスしたい場合は、文字列をruneスライスに変換する必要があります。
正規化の必要性
Unicodeには同じ文字を表現する異なるコードポイントが存在するため、文字列比較や検索を行う前に正規化が必要な場合があります。
Go標準ライブラリにはUnicode正規化を行うパッケージが含まれています(golang.org/x/text/unicode/norm)
golangをもっと詳しくなりたい方に
初めてのGo言語
Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。
詳解Go言語Webアプリケーション開発
こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。
以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。
【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)
まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。
この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。
以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。
この記事が気に入ったらサポートをしてみませんか?