确保您string到符文的一个切片:详见“Slice string into letters”

a := []rune(s) 
for i, r := range a { 
    fmt.Printf("i%d r %c\n", i, r) 
    // every 3 i, do something 
} 
a[n:n+3]
i
s := "世a界世bcd界efg世"

如果试图通过字节解析它字节,你会错过(在天真的分裂,每3个字符实现)的一些“指数模3”(等于2,5,8和11),因为该指数将增加过去这些值:

for i, r := range s { 
    res = res + string(r) 
    fmt.Printf("i %d r %c\n", i, r) 
    if i > 0 && (i+1)%3 == 0 { 
     fmt.Printf("=>(%d) '%v'\n", i, res) 
     res = "" 
    } 
} 

输出:

i 0 r 世 
i 3 r a <== miss i==2 
i 4 r 界 
i 7 r 世 <== miss i==5 
i 10 r b <== miss i==8 
i 11 r c ===============> would print '世a界世bc', not exactly '3 chars'! 
i 12 r d 
i 13 r 界 
i 16 r e <== miss i==14 
i 17 r f ===============> would print 'd界ef' 
i 18 r g 
i 19 r 世 <== miss the rest of the string 
a := []rune(s)
for i, r := range a { 
    res = res + string(r) 
    fmt.Printf("i%d r %c\n", i, r) 
    if i > 0 && (i+1)%3 == 0 { 
     fmt.Printf("=>(%d) '%v'\n", i, res) 
     res = "" 
    } 
} 

输出:

i 0 r 世 
i 1 r a 
i 2 r 界 ===============> would print '世a界' 
i 3 r 世 
i 4 r b 
i 5 r c ===============> would print '世bc' 
i 6 r d 
i 7 r 界 
i 8 r e ===============> would print 'd界e' 
i 9 r f 
i10 r g 
i11 r 世 ===============> would print 'fg世'