Junior
Go'da dilimlerle diziler arasındaki temel fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Dilimler, dinamik olarak değiştirilebilir dizilerin görünümleridir.
| Özellik | Dizi (Array) | Dilim (Slice) |
|---|---|---|
| Boyut | Sabit, oluşturulurken belirlenir | Dinamik, değişebilir |
| Tip | [n]T (burada n boyut, T tip) |
[]T (burada T tip) |
| Fonksiyonlara aktarım | Değeriyle (kopya) | Alt dizine referansla, head, len ve cap ile geçirilir (aslında, bu alanların kopyalarını içeren yeni bir SliceHeader yapısı oluşturulur) |
| Oluşum | var a [5]int veya b := [3]string{"a", "b", "c"} |
var s []int veya t := []int{1, 2, 3} veya u := make([]int, 5) |
| Performans | Sabit boyut nedeniyle daha öngörülebilir, küçük boyutlarda avantajlı olabilir | Boyut değişikliklerinde ek maliyetler olabilir (alt dizinin yeniden tahsisi) |
// Dizi örneği
var arr [3]int = [3]int{1, 2, 3}
// Diziden oluşturulan dilim örneği
slice := arr[1:] // dilim {2, 3}
// Dilim oluşturma örneği
s := []int{10, 20, 30} // alt dizi {10, 20, 30}, uzunluk = 3, kapasite = 3
// Dilimi değiştirme
s = append(s, 40) // şimdi s {10, 20, 30, 40}. Kapasite yetersizse yeni bir alt dizi oluşturulur, uzunluk = 4, kapasite = 6 (genellikle kapasite iki katına çıkarılır).
// Dilim elemanını değiştirme, alt diziyi değiştirir
slice[0] = 99 // arr artık {1, 99, 3}
fmt.Println(arr)