Sobes.tech
Junior

Go'da dilimlerle nasıl çalışılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'daki dilimler (slice'lar), diziler değildir, temel dizinin bir segmentine (veya tamamına) referans verirler. Dinamik veri yapılarıdırlar.

Dilimin Oluşumu:

  • Bir diziden:
// Dizi tanımlama
arr := [5]int{1, 2, 3, 4, 5}
// Diziden dilim oluşturma
s1 := arr[1:4] // s1, arr[1], arr[2], arr[3] öğelerini içerir
// Başka bir dilim oluşturma
s2 := arr[:3]  // s2, arr[0], arr[1], arr[2] öğelerini içerir
// Tüm diziye referans eden bir dilim
s3 := arr[2:]  // s3, arr[2], arr[3], arr[4] öğelerini içerir
// Tüm diziye referans eden bir dilim
s4 := arr[:]
  • make kullanarak:
// Uzunluğu 5 ve kapasitesi 5 olan bir dilim oluşturma
s := make([]int, 5)
// Uzunluğu 5 ve kapasitesi 10 olan bir dilim oluşturma
s_cap := make([]int, 5, 10)
  • Literal:
s := []int{1, 2, 3}

Dilimlerin temel özellikleri:

  • len(s): dilimin şu anki uzunluğunu döner.
  • cap(s): dilimin kapasitesini döner (bir yeniden tahsis olmadan içerebileceği maksimum öğe sayısı).

Öğeleri ekleme (append):

s := []int{1, 2}
s = append(s, 3)      // bir öğe ekler
s = append(s, 4, 5)   // birkaç öğe ekler
s2 := []int{6, 7}
s = append(s, s2...) // başka bir dilimin öğelerini ekler

append, kapasite yeterli değilse temel dizinin yeniden tahsis edilmesine neden olabilir.

Öğeleri kaldırma:

Bir dilimden öğeleri kaldırmak, kalan öğelerle yeni bir dilim oluşturarak veya kopyalayarak yapılır.

s := []int{1, 2, 3, 4, 5}
// İndeks i'deki öğeyi kaldırma
i := 2 // öğeyi indeks 2'den (yani 3) kaldırır
s = append(s[:i], s[i+1:]...)

Dilimleri kopyalama:

src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src) // src'den dst'ye kopyalar

copy, iki dilimin minimum uzunluğunu kopyalar.

Dilimler üzerinde yineleme:

s := []string{"a", "b", "c"}
for i, v := range s {
    // i indeks, v değer
}
for i := range s {
    // sadece indeks
}
for _, v := range s {
    // sadece değer
}

Dilimler referans tipleridir:

Bir dilimdeki değişiklikler, temel dizide ve aynı bellek alanına referans eden diğer dilimlerde de görünür.

arr := [5]int{1, 2, 3, 4, 5}
s1 := arr[1:4] // [2, 3, 4]
s2 := arr[2:5] // [3, 4, 5]

s1[0] = 99
// Artık arr: [1, 99, 3, 4, 5]
// s1: [99, 3, 4]
// s2: [3, 4, 5] (arr[2] öğesi değişti)