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,HasSuffixIndex,LastIndexReplace,ToUpper,ToLower,Trim,TrimSpaceSplit,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
[]byteostrings.Builder.