Sobes.tech
Junior

Πώς μπορεί κανείς να εργαστεί με τις συμβολοσειρές στη γλώσσα Go;

sobes.tech AI

Απάντηση από AI

Οι συμβολοσειρές στο Go είναι αμετάβλητες ακολουθίες byte. Μπορούν να αντιπροσωπεύουν τόσο κείμενο UTF-8 όσο και αυθαίρετα δυαδικά δεδομένα.

Βασικοί τρόποι εργασίας:

  • Δήλωση και αρχικοποίηση:

    var s1 string           // Κενή συμβολοσειρά
    s2 := "γεια"             // Αρχικοποίηση με λεκτικό συμβολοσειράς
    s3 := `πολλές γραμμές
    συμβολοσειρά`             // Ακατέργαστο λεκτικό συμβολοσειράς
    
  • Μήκος συμβολοσειράς:

    len(s2) // Μήκος σε bytes. Για "γεια" θα είναι 4.
    
  • Πρόσβαση σε bytes:

    b := s2[0] // Λήψη byte στη θέση. Επιστρέφει 'γ' (σε UTF-8).
    

    Η άμεση πρόσβαση σε bytes δεν εγγυάται την λήψη πλήρους χαρακτήρα UTF-8.

  • Πρόσβαση σε ρούνες (χαρακτήρες UTF-8): Οι συμβολοσειρές μπορούν να επαναληφθούν με βάση τις ρούνες:

    for index, runeValue := range s2 {
        fmt.Printf("Δείκτης: %d, Ρούνα: %c\n", index, runeValue)
    }
    

    Μήκος σε ρούνες:

    utf8.RuneCountInString(s2) // Μήκος σε ρούνες. Για "γεια" θα είναι 4.
    
  • Συνένωση συμβολοσειρών:

    str1 := "γειά"
    str2 := " κόσμος"
    result := str1 + str2 // Συνένωση με +
    

    Για αποτελεσματική συνένωση πολλών συμβολοσειρών, χρησιμοποιήστε το strings.Builder.

    var sb strings.Builder
    sb.WriteString("γειά")
    sb.WriteString(" ")
    sb.WriteString("κόσμος")
    result := sb.String() // Λήψη της τελικής συμβολοσειράς
    
  • Μετατροπή μεταξύ συμβολοσειρών και τμημάτων byte/ρούνων:

    byteslice := []byte(s2)   // Συμβολοσειρά σε τμήμα byte
    rs := []rune(s2)          // Συμβολοσειρά σε τμήμα ρούνων
    
    backToString := string(byteslice) // Τμήμα byte σε συμβολοσειρά
    backToString = string(rs)         // Τμήμα ρούνων σε συμβολοσειρά
    
  • Πακέτο strings: Παρέχει πολλές χρήσιμες συναρτήσεις:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Πακέτο strconv: Για μετατροπή συμβολοσειρών σε άλλους τύπους δεδομένων (αριθμούς, boolean) και αντίστροφα.

    i, err := strconv.Atoi("123") // Συμβολοσειρά σε int
    s := strconv.Itoa(456)        // Int σε συμβολοσειρά
    
  • Αμεταβλητότητα: Οποιεσδήποτε λειτουργίες που φαίνεται να τροποποιούν μια συμβολοσειρά (π.χ. συνένωση), στην πραγματικότητα δημιουργούν μια νέα συμβολοσειρά. Αυτό είναι σημαντικό για την απόδοση σε συχνές αλλαγές. Σε τέτοιες περιπτώσεις, είναι καλύτερο να χρησιμοποιείτε []byte ή strings.Builder.