私はこれをしたかった:
for i := 0; i < len(str); i++ {
dosomethingwithrune(str[i]) // takes a rune
}
しかし、str[i]
の型は ではなくbyte
( ) であることがわかりました。uint8
rune
バイトではなくルーンで文字列を反復処理するにはどうすればよいですか?
この例は、Effective Goから参照してください。
for pos, char := range "日本語" {
fmt.Printf("character %c starts at byte position %d\n", char, pos)
}
これは次を出力します:
character 日 starts at byte position 0
character 本 starts at byte position 3
character 語 starts at byte position 6
文字列の場合、UTF-8 を解析することで個々の Unicode コード ポイントを分割することで、範囲がより多くの作業を行います。
例えば:
package main
import "fmt"
func main() {
for i, rune := range "Hello, 世界" {
fmt.Printf("%d: %c\n", i, rune)
}
}
出力:
0: H
1: e
2: l
3: l
4: o
5: ,
6:
7: 世
10: 界