Junior — Middle
Τι αντιπροσωπεύει το αποτέλεσμα της εκτέλεσης του τελεστή [] για τον τύπο δεδομένων συμβολοσειρά;
sobes.tech AI
Απάντηση από AI
Στη γλώσσα Go, ο τελεστής [] για τον τύπο δεδομένων string χρησιμοποιείται για την απόκτηση μιας λωρίδας από bytes του string ή ενός μεμονωμένου byte ανά δείκτη. Το string στο Go είναι μια αμετάβλητη ακολουθία bytes (UTF-8). Όταν προσπελάζουμε str[i], επιστρέφεται ένα byte τύπου byte (ψευδώνυμο του uint8), και όχι ένα σύμβολο με την κλασική έννοια, καθώς τα σύμβολα Unicode μπορεί να καταλαμβάνουν πολλαπλά bytes.
Παράδειγμα:
s := "Привет"
fmt.Println(s[0]) // Θα εμφανίσει το byte που αντιστοιχεί στο πρώτο μέρος του χαρακτήρα 'П'
fmt.Println(string(s[0])) // Θα εμφανίσει ένα εσφαλμένο σύμβολο, καθώς δεν είναι πλήρες UTF-8 σύμβολο
// Για την απόκτηση χαρακτήρων (runes), πρέπει να μετατρέψουμε το string σε ένα slice από runes:
r := []rune(s)
fmt.Println(string(r[0])) // Θα εμφανίσει 'П'
Επομένως, ο τελεστής [] για τα strings επιστρέφει ένα byte ανά δείκτη, όχι ένα Unicode σύμβολο.