這是因?yàn)樵贕o語(yǔ)言中西乖,for range
循環(huán)會(huì)將字符串解碼為Unicode代碼點(diǎn)(rune)狐榔,而不是原始字節(jié)。對(duì)于字符串中的每個(gè)字符获雕,for range
會(huì)自動(dòng)將字符轉(zhuǎn)換為rune類(lèi)型薄腻。具體示例如下:
s := "你好"
for _, ch := range s {
fmt.Printf("%c %T\n", ch, ch) // 輸出: 你 int32\n好 int32
}
而在使用索引訪問(wèn)字符串時(shí)(例如s[i]
),你獲取的是字符串的原始字節(jié)届案,因?yàn)镚o語(yǔ)言中的字符串是字節(jié)切片(slice of bytes)庵楷。例如:
for i := 0; i < len(s); i++ {
fmt.Printf("%c %T\n", s[i], s[i]) // 輸出: ? uint8\n? uint8\n? uint8\n¥ uint8
}
這種情況下,s[i]
返回的是原始的UTF-8編碼字節(jié)楣颠,而不是完整的Unicode字符尽纽。希望這解釋了你所遇到的情況!如果還有其他問(wèn)題童漩,歡迎隨時(shí)提問(wèn)弄贿。