Sobes.tech
Junior — Middle

რა შედეგს აბრუნებს ინტეგრირებული ფუნქცია len როდესაც ის ზოლზეა გამოძახებული?

sobes.tech AI

პასუხი AI-სგან

Go-ში, შიდა ფუნქცია len, როდესაც მას მიმართავთ სტრიქონზე, აბრუნებს ამ სტრიქონის ბაიტების რაოდენობას, არა სიმბოლოების (რუნების) რაოდენობას.

ეს იმიტომ ხდება, რომ Go-ში სტრიქონები ბაიტების სერიისაა, რომლებიც კოდირებულია UTF-8-ში. თუ სტრიქონი შეიცავს მხოლოდ ASCII სიმბოლოებს, ბაიტების რაოდენობა ტოლია სიმბოლოების რაოდენობას. მაგრამ თუ სტრიქონი შეიცავს მრავალბაიტიან სიმბოლოებს (მაგალითად, კირილიცა, ემოჯი), len დააბრუნებს ბაიტების ჯამს, არა სიმბოლოების რაოდენობას.

მაგალითი:

s := "Привет"
fmt.Println(len(s)) // გამოიტანს ბაიტების რაოდენობას, მაგალითად 12

runes := []rune(s)
fmt.Println(len(runes)) // გამოიტანს სიმბოლოების რაოდენობას, მაგალითად 6

თუ გსურთ მიიღოთ სიმბოლოების (რუნების) რაოდენობა, უნდა გარდაქმნათ სტრიქონი რუნების სლაიდად და აიღოთ მისი სიგრძე.