Junior
Go-da dilimlər və massivlər arasında əsas fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Sıralar, dinamik olaraq dəyişdirilə bilən massivlərin görünüşləridir.
| Xüsusiyyət | Array | Slice |
|---|---|---|
| Ölçü | Sabit, yaradılarkən müəyyən edilir | Dinamik, dəyişə bilər |
| Tip | [n]T (burada n ölçü, T tipdir) |
[]T (burada T tipdir) |
| Funksiyalara ötürülməsi | Qiymət ilə (kopya) | Alt array-ə referansla, head, len və cap ötürülür (əslində, bu sahələrin kopyalarını ehtiva edən yeni SliceHeader strukturu yaradılır) |
| Yaradılması | var a [5]int və ya b := [3]string{"a", "b", "c"} |
var s []int və ya t := []int{1, 2, 3} və ya u := make([]int, 5) |
| Performans | Sabit ölçü səbəbindən daha əvvəlcədən proqnozlaşdırıla bilər, kiçik ölçülərdə üstün ola bilər | Ölçü dəyişikliklərində əlavə xərclər ola bilər (alt array-ın yenidən ayrılması) |
// Array nümunəsi
var arr [3]int = [3]int{1, 2, 3}
// Array-dən yaradılan slice nümunəsi
slice := arr[1:] // slice {2, 3}
// Slice yaradılması nümunəsi
s := []int{10, 20, 30} // alt array {10, 20, 30}, uzunluğu = 3, kapasitəsi = 3
// Slice-ə dəyişiklik
s = append(s, 40) // indi s {10, 20, 30, 40}. Əgər kifayət qədər kapasitə yoxdursa, yeni alt array yaradılır, uzunluğu = 4, kapasitə = 6 (adətən iki qat artırılır).
// Slice elementinin dəyişdirilməsi alt array-ı dəyişir
slice[0] = 99 // arr indi {1, 99, 3}
fmt.Println(arr)