Sobes.tech
Junior

Come si lavorano con le stringhe nel linguaggio Go?

sobes.tech AI

Risposta dell'AI

Le stringhe in Go sono sequenze immutabili di byte. Possono rappresentare sia testo UTF-8 che dati binari arbitrari.

Principali modi di lavorare:

  • Dichiarazione e inizializzazione:

    var s1 string           // Stringa vuota
    s2 := "ciao"             // Inizializzazione con letterale di stringa
    s3 := `multilinea
    stringa`             // Letterale di stringa raw
    
  • Lunghezza della stringa:

    len(s2) // Lunghezza in byte. Per "ciao" sarà 4.
    
  • Accesso ai byte:

    b := s2[0] // Ottieni il byte all'indice. Restituisce 'c' (in UTF-8).
    

    L'accesso diretto ai byte non garantisce di ottenere un carattere UTF-8 completo.

  • Accesso alle rune (caratteri UTF-8): Le stringhe possono essere iterate per rune:

    for index, runeValue := range s2 {
        fmt.Printf("Indice: %d, Runa: %c\n", index, runeValue)
    }
    

    Lunghezza in rune:

    utf8.RuneCountInString(s2) // Lunghezza in rune. Per "ciao" sarà 4.
    
  • Concatenazione di stringhe:

    str1 := "hello"
    str2 := " world"
    result := str1 + str2 // Concatenazione con +
    

    Per una concatenazione efficiente di molte stringhe, usa strings.Builder.

    var sb strings.Builder
    sb.WriteString("hello")
    sb.WriteString(" ")
    sb.WriteString("world")
    result := sb.String() // Ottieni la stringa risultante
    
  • Conversione tra stringhe e slice di byte/rune:

    byteslice := []byte(s2)   // Stringa in slice di byte
    rs := []rune(s2)          // Stringa in slice di rune
    
    backToString := string(byteslice) // Slice di byte in stringa
    backToString = string(rs)         // Slice di rune in stringa
    
  • Pacchetto strings: Offre molte funzioni utili:

    • Contains, HasPrefix, HasSuffix
    • Index, LastIndex
    • Replace, ToUpper, ToLower, Trim, TrimSpace
    • Split, Join
  • Pacchetto strconv: Per convertire stringhe in altri tipi di dati (numeri, booleani) e viceversa.

    i, err := strconv.Atoi("123") // Stringa in int
    s := strconv.Itoa(456)        // Int in stringa
    
  • Immutabilità: Qualsiasi operazione che sembri modificare una stringa (ad esempio, concatenazione) in realtà crea una nuova stringa. Questo è importante per le prestazioni in modifiche frequenti. In tali casi, è meglio usare []byte o strings.Builder.