Junior
Ako fungujú reťazce v jazyku Go?
sobes.tech AI
Odpoveď od AI
Reťazce v Go sú nemenné sekvencie bajtov. Predstavujú "bajtový rez" ([]byte) s garanciou nemennosti.
Kľúčové vlastnosti:
- Nemennosť: Po vytvorení sa reťazec nemôže zmeniť. Akákoľvek operácia, ktorá sa zdá byť modifikáciou, v skutočnosti vytvára nový reťazec.
- Zobrazenie: Predvolene reťazce v Go predstavujú text zakódovaný v UTF-8. Sú však len sekvencie bajtov; interpretácia ako UTF-8 nastáva pri práci s runami.
- Runy: Unicode znaky v Go sú reprezentované typom
rune, ktorý je aliasom preint32. Iterácia cez reťazec pomocourangeautomaticky dekóduje UTF-8 a poskytuje runy a ich počiatočné indexy v bajtoch. - Dĺžka: Funkcia
len(s)vracia počet bajtov v reťazci, nie počet znakov (rún). Pre získanie počtu run použiteutf8.RuneCountInString(s)alebo iterujte pomocourange. - Konkatenácia: Pre spojovanie reťazcov sa používa operátor
+. To vytvára nový reťazec. Pre efektívne spájanie veľkého množstva reťazcov sa odporúča používaťstrings.Builder.
Príklady:
// Deklarácia reťazca
str := "Hello, 世界"
// Dĺžka reťazca (v bajtoch)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1) (1) 世(3) 界(3))
// Iterácia cez runy
runeCount := 0
for index, runeValue := range str {
// index - počiatočný index runy v bajtoch
// runeValue - runa
runeCount++
// fmt.Printf("Index: %d, Runa: %c (Hodnota: %d)\n", index, runeValue, runeValue)
}
// počet run (9)
// Prístup k bajtu podľa indexu
// Pozor: toto je bajt, nie znak!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // Počiatočný bajt znaku '世'
// Konkatenácia reťazcov
newStr := str + "!"
// Použitie strings.Builder pre efektívnu konkatenáciu
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"