Sobes.tech
Junior

Kaip veikia eilutės Go kalboje?

sobes.tech AI

Atsakymas iš AI

„Go“ eilutės yra nepakeičiami baitų sekos. Jos yra vaizduojamos kaip „baitų dalis“ ([]byte) ir garantuoja nepakeičiamumą.

Pagrindinės savybės:

  • Nepakeičiamumas: Sukūrus eilutę, jos negalima pakeisti. Bet kokia operacija, kuri atrodo kaip eilutės modifikavimas, iš tikrųjų sukuria naują eilutę.
  • Atvaizdavimas: „Go“ eilutės dažniausiai vaizduoja UTF-8 koduotą tekstą. Tačiau jos yra tik baitų sekos; kaip UTF-8 interpretacija vyksta dirbant su rūnais.
  • Rūnai: Unicode simboliai „Go“ yra vaizduojami tipu rune, kuris yra int32 pseudonimas. Eilutės perėjimas naudojant range automatiškai dekoduoja UTF-8 ir pateikia rūnus bei jų pradines indeksus baituose.
  • Ilgis: Funkcija len(s) grąžina eilutės baitų skaičių, o ne simbolių (rūnų). Rūnų skaičiui gauti naudokite utf8.RuneCountInString(s) arba pereikite per eilutę su range.
  • Konkatenacija: Eilutės sujungiamos naudojant operatorių +. Tai sukuria naują eilutę. Efektyviam didelio kiekio eilutės sujungimui rekomenduojama naudoti strings.Builder.

Pavyzdžiai:

// Eilutės deklaravimas
str := "Hello, pasaulis"

// Eilutės ilgis (baituose)
byteLen := len(str) // 13 (H(1)e(1)l(1)l(1)o(1),(1) (1)p(3)a(3)s(3)a(3)u(3)l(3)i(3)k(3))

// Pereiti per rūnus
runeCount := 0
for index, runeValue := range str {
	// index - rūno pradinis indeksas baituose
	// runeValue - rūnas
	runeCount++
	// fmt.Printf("Index: %d, Rune: %c (Value: %d)\n", index, runeValue, runeValue)
}
// runeCount - rūnų skaičius (9)

// Prieigos prie baito pagal indeksą
// Dėmesio: tai baitas, ne simbolis!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // '世' simbolio pradinis baitas

// Eilutės sujungimas
newStr := str + "!"

// Naudojant `strings.Builder` efektyviam sujungimui
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("Pasaulis")
efficientStr := builder.String() // "Hello, Pasaulis"