Sobes.tech
Junior

Go dilində sətirlər necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da sətirlər dəyişməz ardıcıllıqlardır. Onlar "bayt dilimi" ([]byte) kimi təmsil olunur və dəyişməzlik zəmanətlidir.

Əsas xüsusiyyətlər:

  • Dəyişməzlik: Yaradıldıqdan sonra, sətir dəyişdirilə bilməz. Hər hansı bir əməliyyat, dəyişiklik kimi görünsə də, əslində yeni sətir yaradır.
  • Təqdimat: Standart olaraq, Go-da sətirlər UTF-8 kodlaşdırılmış mətni təmsil edir. Ancaq onlar sadəcə bayt ardıcıllıqlarıdır; UTF-8 kimi şərh, runlar ilə işləyərkən baş verir.
  • Runlar: Go-da Unicode simvolları rune tipi ilə təmsil olunur, bu int32-nin takma adıdır. range istifadə edilərək sətirdə iterasiya, avtomatik olaraq UTF-8-i dekod edir və runlar və onların başlanğıc indekslərini təmin edir.
  • Uzunluq: len(s) funksiyası, sətirdəki bayt sayını verir, simvol (rune) sayını deyil. Rune sayını almaq üçün utf8.RuneCountInString(s) və ya range ilə iterasiya istifadə edilə bilər.
  • Birgəlik: Sətirlərin birləşdirilməsi üçün + operatoru istifadə olunur. Bu, yeni sətir yaradır. Çox sayda sətiri səmərəli birləşdirmək üçün strings.Builder istifadə etmək tövsiyə olunur.

Nümunələr:

// Sətir elan etmək
str := "Hello, 世界"

// Sətirin uzunluğu (bayt ilə)
byteLen := len(str) // 13 (H(1) e(1) l(1) l(1) o(1) ,(1)  (1) 世(3) 界(3))

// Runlar üzərində iterasiya
runeCount := 0
for index, runeValue := range str {
	// index - runanın başlanğıc indeksi baytlarda
	// runeValue - runa
	runeCount++
	// fmt.Printf("İndeks: %d, Runa: %c (Dəyər: %d)\n", index, runeValue, runeValue)
}
// rune sayı (9)

// Bayta indekslə giriş
// Diqqət: bu, baytdır, simvol deyil!
// byteAtIndex := str[0] // 'H'
// byteAtIndex := str[7] // '世' simvolunun başlanğıc baytı

// Sətirlərin birləşdirilməsi
newStr := str + "!"

// Effektiv birləşdirmə üçün strings.Builder istifadə
// import "strings"
var builder strings.Builder
builder.WriteString("Hello, ")
builder.WriteString("World")
efficientStr := builder.String() // "Hello, World"