Go’da Veri Yapıları
Go’da veri saklamak ve yönetmek için çeşitli veri yapıları mevcuttur. En yaygın kullanılanları inceleyelim.
Arrays (Diziler)
Arrays, sabit boyutlu koleksiyonlardır:
// 5 elemanlı int dizisi
var numbers [5]int
numbers[0] = 1
numbers[1] = 2
// Dizi tanımı ve başlatma
primes := [5]int{2, 3, 5, 7, 11}
Slices (Dilimler)
Slices, dinamik boyutlu dizilerdir ve Go’da en çok kullanılan veri yapıdır:
// Slice oluşturma
fruits := []string{"elma", "armut", "muz"}
// Eleman ekleme
fruits = append(fruits, "çilek")
// Dilimleme
numbers := []int{1, 2, 3, 4, 5}
subset := numbers[1:4] // [2, 3, 4]
// Kapasite ve uzunluk
fmt.Println(len(fruits)) // 4
fmt.Println(cap(fruits)) // kapasite
Slice İşlemleri
// Copy - kopyalama
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)
// Append - ekleme
slice := []int{1}
slice = append(slice, 2, 3)
Maps (Haritalar)
Maps, anahtar-değer çiftlerini saklar:
// Map oluşturma
ages := make(map[string]int)
// Değer atama
ages["Ahmet"] = 25
ages["Mehmet"] = 30
// Map tanımı ve başlatma
colors := map[string]string{
"red": "#ff0000",
"green": "#00ff00",
"blue": "#0000ff",
}
// Değer okuma ve varlık kontrolü
if age, exists := ages["Ahmet"]; exists {
fmt.Println("Ahmet:", age)
}
// Döngü ile gezinme
for name, age := range ages {
fmt.Printf("%s: %d\n", name, age)
}
// Eleman silme
delete(ages, "Mehmet")
Hangisini Ne Zaman Kullanmalı?
| Veri Yapısı | Kullanım Senaryosu |
|---|---|
| Array | Sabit boyutlu koleksiyonlar (örn: haftanın günleri) |
| Slice | Dinamik listeler, belirsiz boyutlu koleksiyonlar |
| Map | Anahtar-değer eşleşmeleri, hızlı arama |
Performans İpuçları
Slice pre-allocation: Kapasite biliyorsanız baştan belirtin
items := make([]int, 0, 1000) // kapasite 1000Map sizing: Map boyutu tahmin edilebiliorsa başlatın
m := make(map[string]int, 100)Slice büyümesi: Tek seferde büyütün “`go // İyi items = append(items, newItems…)
// Kötü for _, item := range newItems { items = append(items, item) } “`
Yorumlar (0)
Henüz yorum yapılmamış. İlk yorumu sen yap!
Yorum Yap