Junior
Cum funcționează șirurile în limbajul Go?
sobes.tech AI
Răspuns de la AI
Șirurile în Go sunt secvențe imuabile de octeți. Ele reprezintă o "tăietură de octeți" ([]byte) cu garanția imuabilității.
Caracteristici cheie:
- Imuabilitate: După crearea, un șir nu poate fi modificat. Orice operație care pare să îl modifice, de fapt, creează un șir nou.
- Reprezentare: În mod implicit, șirurile în Go reprezintă text codificat în UTF-8. Cu toate acestea, ele sunt pur și simplu secvențe de octeți; interpretarea ca UTF-8 are loc atunci când se lucrează cu rune.
- Runes: Caracterele Unicode în Go sunt reprezentate de tipul
rune, care este un alias pentruint32. Iterarea peste un șir folosindrangedecodează automat UTF-8 și furnizează rune și indicii lor inițiali în octeți. - Lungime: Funcția
len(s)returnează numărul de octeți din șir, nu numărul de caractere (rune). Pentru a obține numărul de rune, se foloseșteutf8.RuneCountInString(s)sau se iterează curange. - Concatenare: Pentru unirea șirurilor, se folosește operatorul
+. Acest lucru creează un șir nou. Pentru o concatenare eficientă a multor șiruri, se recomandă utilizareastrings.Builder.
Exemple:
// Declararea unui șir
str := "Hello, 世界"
// Lungimea șirului (în octeți)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1) (1) 世(3) 界(3))
// Iterarea peste rune
runeCount := 0
for index, runeValue := range str {
// index - indicele inițial al rune în octeți
// runeValue - rune
runeCount++
// fmt.Printf("Indice: %d, Runa: %c (Valoare: %d)\n", index, runeValue, runeValue)
}
// runeCount - numărul de rune (9)
// Accesul la un octet după index
// Atenție: acesta este un octet, nu un caracter!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // Octetul inițial al caracterului '世'
// Concatenarea șirurilor
newStr := str + "!"
// Utilizarea strings.Builder pentru concatenare eficientă
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"