Ответ
Функция len() для строки возвращает количество байт, а не символов (рун). В UTF-8 символы могут занимать от 1 до 4 байт, поэтому результат может отличаться от ожидаемого.
Пример:
s := "Привет"
fmt.Println(len(s)) // 12, а не 6 (каждый кириллический символ — 2 байта)
Для подсчёта символов используйте utf8.RuneCountInString():
fmt.Println(utf8.RuneCountInString(s)) // 6