Sobes.tech
Junior — Middle

Millist tulemust tagastab sisseehitatud funktsioon len, kui seda kutsutakse stringil?

sobes.tech AI

Vastus AI-lt

Go-s sisseehitatud funktsioon len, kui seda kutsutakse stringi peal, tagastab selle stringi baitide arvu, mitte märkide (rune) arvu.

See on tingitud sellest, et Go stringid on baitide järjestused, mis on kodeeritud UTF-8-s. Kui string sisaldab ainult ASCII märke, on baitide arv võrdne märkide arvuga. Kuid kui string sisaldab mitme baitiga märke (näiteks kirillitsa, emoji), siis len tagastab baitide summa, mitte märkide arvu.

Näide:

s := "Привет"
fmt.Println(len(s)) // Näitab baitide arvu, näiteks 12

runes := []rune(s)
fmt.Println(len(runes)) // Näitab märkide arvu, näiteks 6

Kui soovite saada märkide (rune) arvu, peate konverteerima stringi rune-ideks ja võtma selle pikkuse.