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[:]
makekullanarak:
// 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)