Sobes.tech
Junior

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

sobes.tech AI

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

Στη Go, οι συμβολοσειρές είναι αμετάβλητες ακολουθίες byte.

Οι βασικοί τρόποι εργασίας με συμβολοσειρές:

  1. Δημιουργία:

    // Κυριολεκτικό συμβολοσειράς
    s1 := "Hello, Go!"
    
    // Από ένα slice byte
    byteArray := []byte{'H', 'e', 'l', 'l', 'o'}
    s2 := string(byteArray)
    
  2. Συγκόλληση:

    s3 := "World"
    result := s1 + " " + s3 // Χρήση του τελεστή +
    

    Για πολλές συγκολλήσεις, είναι πιο αποδοτικό να χρησιμοποιείτε το strings.Builder:

    import "strings"
    
    var sb strings.Builder
    sb.WriteString("Hello")
    sb.WriteString(", ")
    sb.WriteString("World!")
    result2 := sb.String()
    
  3. Μήκος:

    • Σε bytes:
      byteLength := len(s1)
      
    • Σε χαρακτήρες (runes):
      runeLength := utf8.RuneCountInString(s1) // Απαιτεί εισαγωγή "unicode/utf8"
      
  4. Πρόσβαση σε χαρακτήρες (runes) και επανάληψη: Στη Go, οι συμβολοσειρές αποτελούνται από bytes, αλλά κατά την επανάληψη με range, αποκωδικοποιούνται σε runes (σημεία κώδικα Unicode).

    import "fmt"
    
    for index, runeValue := range s1 {
        fmt.Printf("Δείκτης: %d, Rune: %c, Τύπος: %T\n", index, runeValue, runeValue)
    }
    

    Η άμεση πρόσβαση με δείκτη επιστρέφει byte, όχι rune:

    b := s1[0] // Επιστρέφει το byte 'H'
    
  5. Μετατροπή:

    • Σε slice byte:
      byteSlice := []byte(s1)
      
    • Σε slice rune:
      runeSlice := []rune(s1)
      
  6. Πακέτο strings: Παρέχει πολλές χρήσιμες λειτουργίες για εργασία με συμβολοσειρές:

    • strings.Contains(s, substr): Ελέγχει αν περιέχει μια υπο-συμβολοσειρά.
    • strings.HasPrefix(s, prefix): Ελέγχει αν ξεκινά με ένα πρόθεμα.
    • strings.HasSuffix(s, suffix): Ελέγχει αν τελειώνει με ένα επίθημα.
    • strings.Index(s, substr): Βρίσκει την πρώτη εμφάνιση μιας υπο-συμβολοσειράς.
    • strings.ReplaceAll(s, old, new): Αντικαθιστά όλες τις εμφανίσεις.
    • strings.Split(s, sep): Χωρίζει τη συμβολοσειρά με βάση έναν διαχωριστή.
    • strings.Join(a []string, sep string): Συνενώνει ένα slice συμβολοσειρών.
    • strings.ToLower(s): Μετατρέπει σε πεζά.
    • strings.ToUpper(s): Μετατρέπει σε κεφαλαία.
    • strings.TrimSpace(s): Αφαιρεί τα κενά από την αρχή και το τέλος.
  7. Πακέτο fmt: Για μορφοποιημένη έξοδο και εισαγωγή.

  8. Πακέτο strconv: Για μετατροπή συμβολοσειρών σε αριθμητικούς τύπους και το αντίστροφο:

    import "strconv"
    
    i, err := strconv.Atoi("123") // Από string σε int
    s := strconv.Itoa(i) // Από int σε string
    

Η αμετάβλητη φύση των συμβολοσειρών είναι σημαντική και σημαίνει ότι οποιαδήποτε λειτουργία που φαίνεται να τροποποιεί μια συμβολοσειρά (π.χ. συγκόλληση ή Replace) στην πραγματικότητα δημιουργεί μια νέα συμβολοσειρά.