Sobes.tech
Middle

Go-da sətir üzərində təkrarlama zamanı hansı nüanslar var?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da sətir üzərində təkrarlama zamanı, sətirin Unicode simvolları deyil, baytların ardıcıllığı olduğunu nəzərə almaq vacibdir. unicode/utf8 paketi çoxbaytlı UTF-8 ardıcıllıqları ilə işləmək üçün funksiyalar təqdim edir.

Əsas nöqtələr:

  • Baytlar üzrə təkrarlama: for i := 0; i < len(s); i++ döngüsü fərdi baytlar üzərində təkrarlanır. Əgər sətir çoxbaytlı simvollar ehtiva edirsə, bir simvol bir neçə baytla təmsil oluna bilər.

    // Baytlar üzrə nümunə
    str := "Привет"
    for i := 0; i < len(str); i++ {
        println(str[i]) // baytları çıxarır, simvolları yox
    }
    
  • Rünlər (Unicode kod nöqtələri) üzrə təkrarlama: Unicode simvolları ilə düzgün işləmək üçün for index, ru := range s döngüsündən istifadə etmək tövsiyə olunur. Bu, UTF-8 çoxbaytlı ardıcıllıqları ilə işləyən rünlər üzərində təkrarlanır.

    // Rünlər üzərində nümunə
    str := "Привет"
    for index, ru := range str {
        println(index, ru) // rünün başlanğıc indeksini və rünü (int32 kimi) çıxarır
    }
    
  • Sətirin uzunluğu: len(s) funksiyası baytların sayını, rünlərin sayını deyil, qaytarır. Rünlərin sayını almaq üçün utf8.RuneCountInString(s) istifadə edin.

    // Bayt və rün sayını hesablama nümunəsi
    str := "Привет"
    println("Baytların sayı:", len(str)) // baytların sayını göstərir
    println("Rünlərin sayı:", utf8.RuneCountInString(str)) // rünlərin sayını göstərir
    
  • İndeksə görə giriş: s[i] giriş i-ci baytı, rünü deyil. Birbaşa rünlərə indekslə giriş dəstəklənmir.

    // Bayta giriş nümunəsi
    str := "Привет"
    println(str[0]) // sətirin ilk baytını çıxarır, ilk rünü yox
    
  • Sətirlərin dilimlənməsi: Sətir dilimləri də bayt səviyyəsində işləyir. s[i:j] yeni bayt dilimi yaradır.

    // Baytlar üzrə dilim nümunəsi
    str := "Привет"
    println(str[0:2]) // ilk iki baytı göstərə bilər, əgər ilk iki bayt tam rünü təşkil etmirsə
    

Unicode ilə etibarlı işləmək üçün Go-da range ilə iterasiya və unicode/utf8 paketindən funksiyaların istifadəsini tövsiyə edirəm.