Avatar ·

什么是 Go 中的 rune,它与 byte 有何不同?

大家好!我刚开始学习 Go,遇到了一个奇怪的数据类型——rune。我读了文档,但还是没完全理解它的用途。 我正在尝试处理字符串并对其进行迭代。我写了这样的代码: ```go package main import "fmt" func main() { s := "Привет, мир!" for i := 0; i < len(s); i++ { fmt.Printf("%c ", s[i]) } } ``` 但结果不是预期的字符,而是一堆乱码:`П Ð Ð¸ в е Ñ , м и Ñ !`。我期望按顺序看到每个字符,但输出显然不是我想要的。为什么会这样? 后来我把循环改成 `for i, r := range s`,一切就正常了。文档中说 `r` 的类型是 `rune`。 请解释一下: 1. 简单来说,什么是 `rune`? 2. `byte` 和 `rune` 有什么区别? 3. 什么时候该用 `rune`,什么时候该用 `byte`? 4. 为什么简单的索引循环对西里尔字母不起作用,而 `range` 可以? 提前感谢!