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 zaint32. Iteracija preko stringa pomoćurangeautomatski 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, koristiteutf8.RuneCountInString(s)ili iterirajte pomoćurange. - Konkatenacija: Za spajanje stringova koristi se operator
+. To kreira novi string. Za efikasno spajanje velikog broja stringova preporučuje se korišćenjestrings.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"