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ı
runetipi ilə təmsil olunur, buint32-nin takma adıdır.rangeistifadə 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 üçünutf8.RuneCountInString(s)və yarangeilə 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 üçünstrings.Builderistifadə 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"