Milyen finomságok vannak egy string iterálásakor Go-ban?
sobes.tech MI
Válasz az MI-től
Amikor Go-ban egy sztringen iterálunk, fontos figyelembe venni, hogy a sztring egy bájtokból álló sorozat, nem Unicode karakterekből. A unicode/utf8 csomag funkciókat kínál több bájtos UTF-8 szekvenciák kezelésére.
Főbb pontok:
-
Iterálás bájtokon: A
for i := 0; i < len(s); i++ciklus egyes bájtokon iterál. Ha a sztring több bájtos karaktereket tartalmaz, egy karakter több bájtból állhat.// Példa bájtokon való iterálásra str := "Привет" for i := 0; i < len(str); i++ { println(str[i]) // bájtokat ír ki, nem karaktereket } -
Iterálás runák (Unicode kódpontok) szerint: A helyes Unicode karakterekkel való munka érdekében a
for index, ru := range sciklust kell használni. Ez iterál a runákon (Unicode kódpontokon), kezelve a több bájtos UTF-8 szekvenciákat.// Példa runák szerint iterálásra str := "Привет" for index, ru := range str { println(index, ru) // kiírja a runa kezdő indexét és magát a runát (int32-ként) } -
A sztring hossza: A
len(s)függvény a bájtok számát adja vissza, nem a runák számát. A runák számának lekéréséhez használja autf8.RuneCountInString(s)függvényt.// Bájtok és runák számolása str := "Привет" println("Bájtok hossza:", len(str)) // a bájtok számát mutatja println("Runák száma:", utf8.RuneCountInString(str)) // a runák számát mutatja -
Hozzáférés index szerint: A
s[i]az i-edik bájtot adja vissza, nem a runát. A runákhoz közvetlen indexelés nem támogatott.// Bájt elérés példája str := "Привет" println(str[0]) // az első bájtot írja ki -
Szeletelés sztringeknél: A sztring szeletek szintén bájt szinten működnek.
s[i:j]egy új bájt szeletet hoz létre.// Sztring szeletelése bájtok szerint str := "Привет" println(str[0:2]) // hibás eredményt adhat, ha az első két bájt nem alkot teljes runát
A megbízható Unicode-kezeléshez Go-ban ajánlott a runák szerint történő iterálás (range) és a unicode/utf8 csomag függvényeinek használata.