Sobes.tech
Middle

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 s siklidan 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 uchun utf8.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.