文字列の要素のタイプはbyteであり、通常のインデックス作成操作を使用してアクセスできます。
文字列の要素をcharとして取得するにはどうすればよいですか?
"some" [1]-> "o"
最も簡単な解決策は、それをルーンの配列に変換することです。
var runes = []rune("someString")
文字列を反復処理する場合、変換は必要ないことに注意してください。効果的な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
Go文字列は通常、UTF-8でエンコードされていますが、必ずしもそうとは限りません。それらがUnicode文字列である場合、「char [acter]」という用語はかなり複雑であり、ルーン(コードポイント)とUnicode文字の一般的/一意の全単射はありません。
とにかく、スライス内のコードポイント(ルーン)を簡単に操作し、変換を使用してそれにインデックスを使用できます。
package main
import "fmt"
func main() {
utf8 := "Hello, 世界"
runes := []rune(utf8)
fmt.Printf("utf8:% 02x\nrunes: %#v\n", []byte(utf8), runes)
}
こちらも:http://play.golang.org/p/qWVSA-n93o
注:多くの場合、インデックスでUnicodeの「文字」にアクセスしたいという要望は設計上の誤りです。ほとんどのテキストデータは順番に処理されます。
別のオプションはパッケージutf8string
です:
package main
import "golang.org/x/exp/utf8string"
func main() {
s := utf8string.NewString("")
t := s.At(2)
println(t == '')
}