Sobes.tech
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 rune tüüpi, mis on int32 pseudonüüm. Stringi läbimine range-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 kasutage utf8.RuneCountInString(s) või läbige string range-ga.
  • Kokkuvõtmine: Stringe ühendatakse operaatoriga +. See loob uue stringi. Suurte stringide tõhusaks ühendamiseks soovitatakse kasutada strings.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"