في Go، يُفترض أن النصوص مُرمَّزة بترميز UTF-8. ستحصل حلقة for-range على نص على الـ runes (نقاط شيفرة Unicode) في النص. فكيف تحصل على عناصر البايتات في نص؟ هناك طريقتان لتحقيق ذلك. أداء هاتين الطريقتين متكافئ جوهرياً.
الطريقة 1: استخدام حلقة for;;
for i := 0; i < len(aString); i++ {
byteElement := aString[i]
... // استخدم byteElement
}
الطريقة 2: استخدام حلقة for-range
يُجري مصرِّف Go الرسمي تحسينات خاصة بحيث لا يحدث تخصيص ذاكرة ولا تكرار للبايتات في التحويل []byte(aString) إذا ثبت أن شريحة البايتات الناتجة (من التحويل) لن تُستخدم بالتزامن. مثلاً، التحويل الذي يلي الكلمة المفتاحية range لا يخصص البايتات الأساسية ولا يكرّرها.
for _, byteElement := range []byte(aString) {
... // استخدم byteElement
}