See this example from Effective Go :
for pos, char := range "日本語" {
fmt.Printf("character %c starts at byte position %d\n", char, pos)
}
This prints :
character 日 starts at byte position 0
character 本 starts at byte position 3
character 語 starts at byte position 6
For strings, the range does more work for you, breaking out individual Unicode code points by parsing the UTF-8.