Sobes.tech
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)