Sobes.tech
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 pre int32. Iterácia cez reťazec pomocou range automaticky 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žite utf8.RuneCountInString(s) alebo iterujte pomocou range.
  • 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"