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 stringdö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 və []byte arasında konvertasiya:
// string -> []byte
byteSlice := []byte(s)
// []byte -> string
newString := string(byteSlice)