Junior — Middle
Ποιο αποτέλεσμα επιστρέφει η ενσωματωμένη λειτουργία len όταν καλείται σε μια συμβολοσειρά;
sobes.tech AI
Απάντηση από AI
Στη Go, η ενσωματωμένη συνάρτηση len όταν καλείται σε μια συμβολοσειρά επιστρέφει τον αριθμό των bytes σε αυτήν, και όχι τον αριθμό των χαρακτήρων (runes).
Αυτό συμβαίνει επειδή οι συμβολοσειρές στη Go είναι ακολουθίες bytes κωδικοποιημένες σε UTF-8. Αν η συμβολοσειρά περιέχει μόνο ASCII χαρακτήρες, τότε ο αριθμός των bytes είναι ίσος με τον αριθμό των χαρακτήρων. Αλλά αν η συμβολοσειρά περιέχει πολυ-byte χαρακτήρες (π.χ. κυριλλικά, emoji), τότε η len θα επιστρέψει το άθροισμα των bytes, όχι τον αριθμό των χαρακτήρων.
Παράδειγμα:
s := "Привет"
fmt.Println(len(s)) // Θα εμφανίσει τον αριθμό των bytes, π.χ. 12
runes := []rune(s)
fmt.Println(len(runes)) // Θα εμφανίσει τον αριθμό των χαρακτήρων, π.χ. 6
Αν θέλετε να πάρετε τον αριθμό των χαρακτήρων (runes), πρέπει να μετατρέψετε τη συμβολοσειρά σε ένα slice από runes και να πάρετε το μήκος του.