読者です 読者をやめる 読者になる 読者になる

The Round

合同会社ナイツオの開発ブログ

静岡でGo言語やりたい人!!→こちら

Go言語のstring, runeの正体とは? - golang

Ikedaです。

Goのstringとruneについて曖昧な知識のまま使ってきたが、そろそろちゃんと理解しようと思って下記事を読みました。

Strings, bytes, runes and characters in Go - The Go Blog

ざっくりと抜粋。

  • stringは実質read-onlyなbyteスライス。中身はUTF-8とは限らない
  • GoのソースコードUTF-8で書くルール
  • ソースがちゃんとUTF-8で書かれていればリテラルで初期化されたstringはUTF-8になるはず
  • len(string)はbyte数返す
  • string[n]はインデックスnのbyte(int8)
const sample = "日本語"
for i := 0; i < len(sample); i++ {
        fmt.Printf("%x ", sample[i])
}

↓結果

e6 97 a5 e6 9c ac e8 aa 9e 
  • runeはUnicodeのコードポイント。int32のalias
  • (UTF-8の)stringをrangeで回すとruneが取れる
const nihongo = "日本語"
for index, runeValue := range nihongo {
        fmt.Printf("%#U starts at byte position %d\n", runeValue, index)
}

↓結果

U+65E5 '日' starts at byte position 0
U+672C '本' starts at byte position 3
U+8A9E '語' starts at byte position 6
  • runeでもっと凝ったことしたければ unicode/utf8パッケージ使え

φ( ̄^ ̄ )メモメモ