Sobes.tech
Middle

Go proqramlaşdırma dilində sətirlər necə qurulub?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da sətir dəyişməz baytların ardıcıllığıdır.

Əsas xüsusiyyətlər:

  • Dəyişməzlik: yaradıldıqdan sonra sətir dəyişdirilə bilməz.
  • Təsviri: göstərici və uzunluq kimi saxlanılır. Göstərici yaddaşda ardıcıllığın ilk baytına işarə edir. Uzunluq baytların sayıdır.
  • Kodlaşdırma: Go-da sətirlər kodlaşdırma haqqında məlumat daşımır. Tez-tez UTF-8 saxlamaq üçün istifadə olunur, lakin hər hansı bayt ola bilər.
  • Baytlar üzrə iterasiya: for index, value range string döngüsü sətir üzərində iterasiya edərkən indeks və rune (int32) qaytarır, bayt deyil.
  • Rune-lər üzərində iterasiya: rune Unicode kod nöqtəsini təmsil edir. Go UTF-8 istifadə edir, ona görə bir rune 1-dən 4 bayt arasında ola bilər.
  • Alt sətir əldə etmək: string[start:end] dilim əməliyyatı yaddaşın eyni hissəsinə işarə edən yeni sətir yaradır, lakin sərhədləri fərqlidir.

Nümunələr:

// İlan və ilkinləşdirmə
var s string
s = "Привет" // Go-da sətir literalı - baytların ardıcıllığı,
             // ümumiyyətlə UTF-8 kimi şərh olunur

// Sətirin baytlar üzrə uzunluğu
byteLength := len(s) // 12, çünki "П", "р", "и", "в", "е", "т" çoxbaytlı simvollardır UTF-8-də

// Rune-lər üzərində iterasiya
runeCount := 0
for index, runeValue := range s {
    // index - rune-un başlanğıc indeksi baytlarda
    // runeValue - rune-un dəyəri (int32)
    _ = index // istifadə olunmayan dəyişən üçün _ istifadə edilir
    // fmt.Printf("İndeks: %d, Rune: %c (U+%04X)\n", index, runeValue, runeValue)
    runeCount++
}
// runeCount 6 olacaq

// Baytlar üzərində iterasiya
byteCount := 0
for i := 0; i < len(s); i++ {
    // s[i] - indeks i-dəki bayt
    _ = s[i] // istifadə olunmayan dəyişən üçün _ istifadə edilir
    // fmt.Printf("İndeks %d-də bayt: %d\n", i, s[i])
    byteCount++
}
// byteCount 12 olacaq

// Alt sətir əldə etmək (bayt dilimi)
// Vacib: bayt dilimi çoxbaytlı rune-u poza bilər
// sub := s[0:5] // Bu, etibarsız UTF-8 ardıcıllığı ola bilər

// Güvənli işləmək üçün strings və ya unicode/utf8 paketlərindən istifadə edin

Bənzərsizləşdirmə ilə bayt dilimi ([]byte):

Xüsusiyyət String []byte
Dəyişdirilə bilməz Bəli Xeyr
Təsviri Göstərici + Uzunluq Göstərici + Uzunluq + Həcmi
Növ Daxili primitiv Dilim (slice)
İstifadə Dəyişməz mətn Dəyişdirilə bilən məlumatlar (baytlar)

string[]byte arasında konvertasiya:

// string -> []byte
byteSlice := []byte(s)

// []byte -> string
newString := string(byteSlice)