len(s) возвращает количество байт, не символов. Для Unicode-строк это разные вещи: len("привет") = 12 (по 2 байта на кириллицу в UTF-8).
Количество символов (рун): utf8.RuneCountInString(s) или len([]rune(s)). Для итерации по символам используй range — он автоматически декодирует руны:
for i, r := range "привет" {
fmt.Printf("%d: %c\n", i, r)
}
range возвращает байтовый индекс и руну.