Sobes.tech
Junior — Middle

Milyen eredményt ad vissza az beépített len függvény egy sztring esetén?

sobes.tech MI

Válasz az MI-től

Go-ban a beépített len függvény, ha egy stringre hívják meg, akkor annak bájtok számát adja vissza, nem a karakterek (runák) számát.

Ez azért van, mert a Go-ban a stringek UTF-8 kódolású bájtsorozatok. Ha a string csak ASCII karaktereket tartalmaz, akkor a bájtok száma megegyezik a karakterek számával. De ha a string többbájtos karaktereket tartalmaz (pl. cirill, emoji), akkor a len a bájtok összegét adja vissza, nem a karakterek számát.

Példa:

s := "Привет"
fmt.Println(len(s)) // Meg fogja mutatni a bájtok számát, pl. 12

runes := []rune(s)
fmt.Println(len(runes)) // Meg fogja mutatni a karakterek számát, pl. 6

Ha a karakterek (runák) számát szeretnéd, akkor a stringet rune szeletté kell alakítani, és annak hosszát kell lekérdezni.