Runes مقابل Bytes
افهم البنية الداخلية لسلاسل Go النصية
Runes مقابل Bytes درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما السلسلة النصية في Go؟
السلسلة النصية string في Go هي تسلسل غير قابل للتغيير من البايتات. وتحمل هذه البايتات عادةً نصًا بترميز UTF-8، لكن Go لا يفرض ذلك مطلقًا.
- لا يمكنك تغيير السلسلة النصية في مكانها.
- تحسب
lenعدد البايتات، لا عدد الأحرف.
package main
import "fmt"
func main() {
s := "Go"
fmt.Println(s)
fmt.Println(len(s))
}البايتات خلف الكواليس
تعيد فهرسة سلسلة نصية باستخدام s[i] بايتًا واحدًا (من النوع byte، وهو اسم مستعار للنوع uint8).
في النصوص المكتوبة بحروف ASCII العادية، يشغل كل حرف بايتًا واحدًا بالضبط.
package main
import "fmt"
func main() {
s := "ABC"
fmt.Println(s[0])
fmt.Println(s[1])
fmt.Println(s[2])
}البايت عدد
بما أن البايت ليس سوى عدد، فإن طباعة s[0] تعرض 65، وهو رمز ASCII للحرف A، بدلًا من عرض الحرف نفسه.
ولعرض الحرف، حوّل البايت مرة أخرى إلى سلسلة نصية.
package main
import "fmt"
func main() {
s := "ABC"
fmt.Println(string(s[0]))
}ما هو rune؟
rune هو اسم مستعار للنوع int32، ويمثل نقطة ترميز Unicode واحدة.
- قد يمتد rune واحد على عدة بايتات عند ترميزه باستخدام UTF-8.
- استخدم runes عندما تكون مهتمًا بالأحرف، لا بالبايتات الخام.
package main
import "fmt"
func main() {
var r rune = 'A'
fmt.Println(r)
fmt.Println(string(r))
}الأحرف متعددة البايتات
تحتاج الأحرف غير المكتوبة بـ ASCII إلى أكثر من بايت واحد في UTF-8. فالسلسلة النصية مثل "héllo" تحتوي على بايتات أكثر من عدد حروفها.
لاحظ أن len يعرض عدد البايتات، وهو أكبر من الطول الظاهر.
package main
import "fmt"
func main() {
s := "héllo"
fmt.Println(len(s))
}التكرار على سلسلة نصية
تفكّك حلقة for range على سلسلة نصية ترميز UTF-8 تلقائيًا. وتنتج كل تكرارية:
- فهرس البايت الذي يبدأ عنده rune،
- قيمة rune نفسها.
package main
import "fmt"
func main() {
for i, r := range "héllo" {
fmt.Println(i, string(r))
}
}عدّ الأحرف بطريقة صحيحة
لعدّ الأحرف بدلًا من البايتات، حوّل السلسلة النصية إلى []rune ثم احسب طولها.
يعطيك ذلك عدد نقاط الترميز.
package main
import "fmt"
func main() {
s := "héllo"
runes := []rune(s)
fmt.Println(len(runes))
}الفهرسة حسب rune
بعد الحصول على []rune، يمكنك فهرسته للحصول على الحرف رقم N بدقة، حتى مع النصوص متعددة البايتات.
package main
import "fmt"
func main() {
runes := []rune("héllo")
fmt.Println(string(runes[1]))
}من السلاسل النصية إلى البايتات والعودة
يمكنك التحويل بحرية بين السلسلة النصية و[]byte.
- يعطي
[]byte(s)البايتات الخام. - تعيد
string(b)بناء النص.
package main
import "fmt"
func main() {
b := []byte("Go")
fmt.Println(b)
fmt.Println(string(b))
}بناء سلسلة نصية من runes
يمكن تحويل شريحة من runes مرة أخرى إلى سلسلة نصية بالطريقة نفسها. ويكون ذلك مفيدًا بعد تعديل الأحرف بصورة فردية.
package main
import "fmt"
func main() {
runes := []rune{'G', 'o', '!'}
fmt.Println(string(runes))
}ملخص البايتات مقابل runes
نموذج ذهني سريع:
byte= بايت خام واحد (uint8)، وتحسبlen(s)هذه البايتات.rune= نقطة ترميز Unicode واحدة (int32)، وتنتجrangeهذه القيم.- استخدم
[]runeعند عدّ الأحرف أو فهرستها.
package main
import "fmt"
func main() {
s := "café"
fmt.Println(len(s))
fmt.Println(len([]rune(s)))
}تحقق سريع
اختبر فهمك لـ runes والبايتات.
مراجعة: runes مقابل البايتات
تعلّمت أن سلاسل Go النصية هي تسلسلات غير قابلة للتغيير من البايتات، وتكون عادةً بترميز UTF-8.
byteهو بايت خام؛ وتحسبlenالبايتات.runeهو نقطة ترميز Unicode؛ وتفكّكrangeترميزها.- حوّل باستخدام
[]byte(s)و[]rune(s)للعمل على المستوى المناسب.
package main
import "fmt"
func main() {
s := "Go語"
fmt.Println("bytes:", len(s))
fmt.Println("runes:", len([]rune(s)))
}الأسئلة الشائعة
هل درس «Runes مقابل Bytes» مجاني؟
نعم — نص درس «Runes مقابل Bytes» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «Runes مقابل Bytes»؟
افهم البنية الداخلية لسلاسل Go النصية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «Runes مقابل Bytes»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Runes مقابل Bytes
- دوال الحزمة strings
- strings.Builder
- Unicode وutf8