Junior — Middle
Jaki wynik zwraca wbudowana funkcja len podczas wywołania na ciągu znaków?
sobes.tech AI
Odpowiedź od AI
W Go wbudowana funkcja len, wywołana na ciągu znaków, zwraca liczbę bajtów w tym ciągu, a nie liczbę znaków (runów).
Dzieje się tak, ponieważ ciągi w Go są sekwencjami bajtów zakodowanych w UTF-8. Jeśli ciąg zawiera tylko znaki ASCII, liczba bajtów jest równa liczbie znaków. Jednak jeśli w ciągu znajdują się znaki wielobajtowe (np. cyrylica, emoji), len zwróci sumę bajtów, a nie liczbę znaków.
Przykład:
s := "Привет"
fmt.Println(len(s)) // Wyświetli liczbę bajtów, np. 12
runes := []rune(s)
fmt.Println(len(runes)) // Wyświetli liczbę znaków, np. 6
Jeśli chcesz uzyskać liczbę znaków (runów), musisz przekonwertować ciąg na tablicę runów i wziąć jej długość.