Sobes.tech
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 σύμβολο.