Go の string と range

string を range したときに返るインデックスは
文字列中でのバイト位置を表しているということを知りました。
今まで何文字目というインデックスが返るものと勘違いしてました。
忘れないようにメモしておきます。

参考

https://golang.org/doc/effective_go#for

サンプルコード

https://play.golang.org/p/0HDIL562LUe

package main

import (
    "fmt"
)

func main() {
    for pos, r := range "Aあ1" {
        fmt.Printf("character %c starts at byte position %d\n", r, pos)
    }
}

実行結果

character A starts at byte position 0
character あ starts at byte position 1
character 1 starts at byte position 4