I'd suggest range or utf8.DecodeRune* to step through a unicode string.  Stepping one byte at a time will cut code points in half.