什么是 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` 可以?
提前感谢!