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, izmantojietutf8.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.