Junior
Kuidas töötavad stringid Go keeles?
sobes.tech AI
Vastus AI-lt
Go-s on stringid muutumatud baitide jada. Need esindavad end nagu "baitide lõik" ([]byte) ning nende muutmatus on tagatud.
Peamised omadused:
- Muutmatus: Pärast stringi loomist ei saa seda muuta. Iga operatsioon, mis näib stringi muutmisena, loob tegelikult uue stringi.
- Kuvand: Go stringid tavaliselt esindavad UTF-8 kodeeritud teksti. Kuid need on lihtsalt baitide jada; UTF-8 tõlgendamine toimub töötades rünadega.
- Rünad: Unicode sümbolid on Go-s esindatud
runetüüpi, mis onint32pseudonüüm. Stringi läbiminerange-ga dekodeerib automaatselt UTF-8 ning annab rünad ja nende algindeksid baitides. - Pikkus: Funktsioon
len(s)tagastab stringi baitide arvu, mitte märkide (rünade) arvu. Rünade arvu saamiseks kasutageutf8.RuneCountInString(s)või läbige stringrange-ga. - Kokkuvõtmine: Stringe ühendatakse operaatoriga
+. See loob uue stringi. Suurte stringide tõhusaks ühendamiseks soovitatakse kasutadastrings.Builder.
Näited:
// Stringi deklareerimine
str := "Hello, maailm"
// Stringi pikkus (baitides)
byteLen := len(str) // 13 (H(1)e(1)l(1)l(1)o(1),(1) (1)m(3)a(3)i(3)l(3))
// Läbimine rünadega
runeCount := 0
for index, runeValue := range str {
// index - rünna algindeks baitides
// runeValue - rünna
runeCount++
// fmt.Printf("Index: %d, Rune: %c (Value: %d)\n", index, runeValue, runeValue)
}
// runeCount - rünade arv (9)
// Baiti ligipääs indeksiga
// Tähelepanu: see on bait, mitte märk!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // '世' märgi algne bait
// Stringide ühendamine
newStr := str + "!"
// Kasutades `strings.Builder` tõhusaks ühendamiseks
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("Maailm")
efficientStr := builder.String() // "Hello, Maailm"