Go tilida satr orqali iteratsiya qilishda qanday nozik nuqtalar mavjud?
sobes.tech AI
AIdan javob
Go'da satrni takrorlashda, satr Unicode belgilarining ketma-ketligi emas, balki baytlar ketma-ketligi ekanligini hisobga olish muhimdir. unicode/utf8 paketi UTF-8 ko'p baytli ketma-ketliklar bilan ishlash uchun funksiyalar taqdim etadi.
Asosiy nuqtalar:
-
Baytlar bo'yicha takrorlash:
for i := 0; i < len(s); i++sikli har bir bayt bo'yicha takrorlaydi. Agar satr ko'p baytli belgilarni o'z ichiga olsa, bitta belgi bir nechta bayt bilan ifodalanishi mumkin.// Baytlar bo'yicha takrorlash misoli str := "Привет" for i := 0; i < len(str); i++ { println(str[i]) // baytlarni chiqaradi, belgilarni emas } -
Runlar (Unicode kod nuqtalari) bo'yicha takrorlash: Unicode belgilar bilan to'g'ri ishlash uchun
for index, ru := range ssiklidan foydalanish tavsiya etiladi. Bu UTF-8 ko'p baytli ketma-ketliklar bilan ishlashda runlar bo'yicha takrorlaydi.// Runlar bo'yicha takrorlash misoli str := "Привет" for index, ru := range str { println(index, ru) // running boshlanish indeksini va o'zini (int32 sifatida) chiqaradi } -
Satr uzunligi:
len(s)funktsiyasi baytlar sonini, runlar sonini emas, qaytaradi. Runlar sonini olish uchunutf8.RuneCountInString(s)dan foydalaning.// Baytlar va runlar sonini hisoblash misoli str := "Привет" println("Baytlar uzunligi:", len(str)) // baytlar sonini ko'rsatadi println("Runlar soni:", utf8.RuneCountInString(str)) // runlar sonini ko'rsatadi -
Indeks bo'yicha kirish:
s[i]kirishi i-chi baytni, runa emas. To'g'ridan-to'g'ri runa indeksiga kirish qo'llab-quvvatlanmaydi.// Baytga kirish misoli str := "Привет" println(str[0]) // satrning birinchi baytini chiqaradi, birinchi runa emas -
Satr bo'laklari: Satr bo'laklari ham bayt darajasida ishlaydi.
s[i:j]yangi bayt bo'lagi yaratadi.// Baytlar bo'yicha satr bo'lagi misoli str := "Привет" println(str[0:2]) // birinchi ikki bayt noto'g'ri ketma-ketlikni chiqarishi mumkin, agar birinchi ikki bayt to'liq runa bo'lmasa
Unicode bilan ishonchli ishlash uchun Go'da range bilan takrorlash va unicode/utf8 paketidagi funksiyalarni ishlatishni tavsiya etamiz.