在 Go 中,rune 和 byte 都是基本数据类型。byte 类型表示单个字节的数据,而 rune 类型表示单个 Unicode 字符。
具体来说,byte 类型是 uint8 的别名,范围为 0~255,用于表示 ASCII 码中的字符和二进制数据。而 rune 类型是 int32 的别名,范围为 0~0x10FFFF,用于表示 Unicode 字符。在 Go 中,使用 rune 类型可以方便地处理各种语言的字符,而不仅仅是 ASCII 码。
下面是一个简单的示例:
func main() {
str := "Hello, 世界"
for i := 0; i < len(str); i++ {
fmt.Printf("%c %d\n", str[i], str[i])
}
for _, r := range str {
fmt.Printf("%c %d\n", r, r)
}
}
在上面的示例中,我们定义了一个字符串 str,其中包含了英文字符和中文字符。然后,我们使用两个循环分别遍历字符串中的字节和字符,并输出它们的值和对应的 Unicode 码点。
在第一个循环中,我们使用 len 函数获取字符串的字节数,并使用下标访问字符串中的每个字节。然后,使用 %c 和 %d 格式化字符串将字节和对应的整数值输出。
在第二个循环中,我们使用 range 关键字遍历字符串中的每个字符,将其赋值给变量 r。然后,使用 %c 和 %d 格式化字符串将字符和对应的 Unicode 码点输出。
可以看到,在第一个循环中,中文字符会被拆分成三个字节输出,而在第二个循环中,每个字符都被正确地输出了其对应的 Unicode 码点。这说明使用 rune 类型可以方便地处理 Unicode 字符,而不需要手动处理多个字节。