Sobes.tech
Junior

Kako funkcionišu nizovi u jeziku Go?

sobes.tech АИ

Одговор од АИ

Stringovi u Go su nepromenljive sekvence bajtova. Oni predstavljaju "bajt rez" ([]byte) sa garancijom nepromenljivosti.

Ključne osobine:

  • Nepromenljivost: Nakon kreiranja, string ne može biti izmenjen. Svaka operacija koja izgleda kao modifikacija, u stvari kreira novi string.
  • Prikaz: Po defaultu, stringovi u Go predstavljaju tekst kodiran u UTF-8. Međutim, oni su samo sekvence bajtova; interpretacija kao UTF-8 dešava se pri radu sa runama.
  • Runes: Unicode karakteri u Go predstavljeni su tipom rune, koji je alias za int32. Iteracija preko stringa pomoću range automatski dekodira UTF-8 i pruža runes i njihove početne indekse u bajtovima.
  • Dužina: Funkcija len(s) vraća broj bajtova u stringu, a ne broj karaktera (runa). Za dobijanje broja runa, koristite utf8.RuneCountInString(s) ili iterirajte pomoću range.
  • Konkatenacija: Za spajanje stringova koristi se operator +. To kreira novi string. Za efikasno spajanje velikog broja stringova preporučuje se korišćenje strings.Builder.

Primeri:

// Deklaracija stringa
str := "Hello, 世界"

// Dužina stringa (u bajtovima)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1)  (1) 世(3) 界(3))

// Iteracija kroz runes
runeCount := 0
for index, runeValue := range str {
	// index - početni indeks rune u bajtovima
	// runeValue - rune
	runeCount++
	// fmt.Printf("Indeks: %d, Runa: %c (Vrednost: %d)\n", index, runeValue, runeValue)
}
// broj runa (9)

// Pristup bajtu po indeksu
// Pažnja: ovo je bajt, a ne karakter!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // Početni bajt znaka '世'

// Konkatenacija stringova
newStr := str + "!"

// Korišćenje strings.Builder za efikasnu konkatenaciju
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
eficientStr := builder.String() // "Hello, World"