Sobes.tech
Middle

Kādi ir nianses, strādājot ar virkni iterējot Go valodā?

sobes.tech AI

Atbilde no AI

Kad pareizai iterētu pa virkni Go valodā, ir svarīgi ņemt vērā, ka virkne ir baitu secība, nevis Unicode rakstzīmes. unicode/utf8 pakots nodrošina funkcijas darbam ar daudzbaitu UTF-8 secībām:

Galvenās nianses:

  • Iterācija pa baitiem: for i := 0; i < len(s); i++ cikls iterē pa atsevišķiem baitiem. Ja virkne satur daudzbaitu rakstzīmes, viena rakstzīme var tikt attēlota ar vairākiem baitiem:

    // Piemērs, kā iterēt pa baitiem
    str := "Привет"
    for i := 0; i < len(str); i++ {
        println(str[i]) // izvada baitus, ne rakstzīmes
    }
    
  • Iterācija pa rakstzīmēm (Unicode kodu punktiem): Lai pareizi strādātu ar Unicode rakstzīmēm, izmantojiet for index, ru := range s. Tas iterē pa rakstzīmēm (Unicode kodu punktiem), apstrādājot daudzbaitu UTF-8 secības:

    // Piemērs, kā iterēt pa rakstzīmēm
    str := "Привет"
    for index, ru := range str {
        println(index, ru) // izvada rakstzīmes sākuma indeksu un pašu rakstzīmi (int32)
    }
    
  • Virksnes garums: len(s) atgriež baitu skaitu, nevis rakstzīmju skaitu. Lai iegūtu rakstzīmju skaitu, izmantojiet utf8.RuneCountInString(s):

    // Baitu un rakstzīmju skaita aprēķins
    str := "Привет"
    println("Baitu garums:", len(str)) // baitu skaits
    println("Rakstzīmju skaits:", utf8.RuneCountInString(str)) // rakstzīmju skaits
    
  • Piekļuve pēc indeksa: s[i] atgriež i-tā baitu, nevis i-tās rakstzīmes. Tieša piekļuve rakstzīmēm nav paredzēta:

    // Piekļuve baitam
    str := "Привет"
    println(str[0]) // izvada pirmo baitu, ne pirmo rakstzīmi
    
  • Virksnes griezumi: Virksnes griezumi arī darbojas uz baitu līmeņa. s[i:j] izveido jaunu baitu griezumu:

    // Virksnes griezums pa baitiem
    str := "Привет"
    println(str[0:2]) // var izvadīt nepareizu secību, ja pirmie divi baiti nesastāv no pilnas rakstzīmes
    

Lai droši strādātu ar Unicode, ieteicams izmantot iterāciju pa rakstzīmēm (range) un funkcijas no unicode/utf8 pakotnes.