ما هو rune في Go وكيف يختلف عن byte؟
```html
مرحباً بالجميع! لقد بدأت للتو في تعلم 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`؟
شكراً مسبقاً!
```