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
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パッケージ使え
φ( ̄^ ̄ )メモメモ
(2019.12.12 追記)
- stringをruneスライスでキャストできる Playground