Sobes.tech
Junior

Go tilida satrlar qanday ishlaydi?

sobes.tech AI

AIdan javob

Go'da satrlar o'zgarmas baytlar ketma-ketligidir. Ular "baytli kesim" ([]byte) sifatida ifodalanadi va o'zgarmaslik kafolatlanadi.

Asosiy xususiyatlar:

  • O'zgarmaslik: Satr yaratilgandan so'ng, uni o'zgartib bo'lmaydi. Uni o'zgartishga o'xshash harakatlar aslida yangi satr yaratadi.
  • Taqdimot: Standart holda, Go'da satrlar UTF-8 kodlangan matnni ifodalaydi. Ammo ular faqat baytlar ketma-ketligi; UTF-8 sifatida talqin qilish runlar bilan ishlashda amalga oshiriladi.
  • Runlar: Go'da Unicode belgilar rune turi bilan ifodalanadi, bu int32 ning takroridir. range yordamida satr bo'ylab iteratsiya UTF-8 ni avtomatik ravishda dekodlaydi va runlar hamda ularning boshlang'ich indekslarini taqdim etadi.
  • Uzunlik: len(s) funktsiyasi satrdagi baytlar sonini qaytaradi, belgilar (runlar) sonini emas. Runlar sonini olish uchun utf8.RuneCountInString(s) yoki range bilan iteratsiya qilish mumkin.
  • Qo'shish: Satrlarni birlashtirish uchun + operatoridan foydalaniladi. Bu yangi satr yaratadi. Ko'p satrlarni samarali birlashtirish uchun strings.Builder tavsiya etiladi.

Misollar:

// Satrni e'lon qilish
str := "Hello, 世界"

// Satrning uzunligi (baytlar bilan)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1)  (1) 世(3) 界(3))

// Runlar bo'yicha iteratsiya
runeCount := 0
for index, runeValue := range str {
	// index - runa boshlanish indeksi baytlarda
	// runeValue - runa
	runeCount++
	// fmt.Printf("Indeks: %d, Runa: %c (Qiymat: %d)\n", index, runeValue, runeValue)
}
// rune soni (9)

// Baytga indeks bo'yicha kirish
// E'tibor bering: bu bayt, belgilar emas!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // '世' belgisining boshlang'ich bayti

// Satrlarni qo'shish
newStr := str + "!"

// Samarali qo'shish uchun strings.Builder ishlatish
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"