Go dilinde diğer pek çok dilde olduğu gibi eşleme tablosu diye adlandırabileceğimiz map veri tipi vardır. Yazılım dillerinde bulunan genel veri yapılarından birisi dizilerdir. Diziler aynı türde bir çok veriyi bir arada ve sıralı bir şekilde yönetebilmemizi sağlayan bir topluluk veri tipidir. Go dilindeki map olanağı ise dizinin tamsayı indis kısıtlamasını kaldırarak daha esnek yapılar oluşturmamızı sağlar.

Bununla birlikte dizi indisleri ancak bir tamsayı olabilmektedir. Örneğin haftanın günlerini bir dizi ile temsil etmek güzel bir çözümdür. Oysa renk isimleri Türkçe ve İngilzce olarak saklamak istediğimiz zaman diziler bize bir çözüm olmayacaktır. Bu tür durumlarda map ideal bir çözümdür. Böyle bir map tanımını Go dilinde aşağıdaki gibi yapabiliriz.

1var sozluk = map[string]string {
2    "siyah"   : "black",
3    "beyaz"   : "white",
4    "kırmızı" : "red",
5    "yeşil"   : "green",
6    "mavi"    : "blue",
7}

Burada sozluk isimli bir map tanımlanmış ve ilk değerleri atanmıştır. Map veri yapısının elemanları anahtar(key) ve değer(value) adı verilen iki bilgiden oluşur. Her elemanın anahtarlarını kullanarak değerlerine ulaşabiliriz. Anahtar ve değer tipleri map tanımı yapılırken bildirilir. Bu tipler Go dili tarafından desteklenen herhangi bir tipte olabilir.

Tanımlama

Bir map tanımını yukarıdaki gibi ilk değerlerini vererek yapabiliriz. Bununla birlikte ilk değer vermeden boş bir map tanımıda yapmamız mümkündür. Bunun için aşağıdaki gibi bir tanım yapmak gerekir.

 1var liste = make(map[string]float64)
 2
 3// çilek anahtarına 5.25 değerini ata
 4liste["çilek"] = 5.25
 5
 6// listenin çilek anahtarının değerini yaz
 7fmt.Println(liste["çilek"]) // 5.25
 8
 9// listenin uzunluğunu yaz
10fmt.Println(len(liste)) // 1

Örneğimizde make() olanağı ile önce boş bir liste yapısı oluşturduk. Ardından “çilek” isimli bir anahtar tanımlayıp bu anahtara 5.25 değerini atadık. Mevcut anahtarın değerini almak için yine örnekte görüldüğü gibi bir yazım şekli kullanılır. len() ile uzunluğuna baktığımızda doğal olarak 1 olduğunu görebiliriz.

Eleman Çıkarma

Mevcut bir map üzerinden eleman çıkarmak istediğimizde delete() olanağını kullanırız. delete() iki parametre alır. Bunlardan birincisi tanımlamış olduğumuz map değişkeni ikincisi ise çıkarmak istediğimiz anahtar(key) değeri. Yukarıda tanımlamış olduğumuz “sozluk” örneği üzerinden giderek sözlükten “siyah” elamanını çıkarmak istediğimiz varsayalım.

1delete(sozluk, "siyah")

Bu şekilde istediğimiz anahtarı kullanarak listemizdeki anahtar-değer çiftlerini listeden çıkarabiliriz.

Elemanlara Erişim

Map yapıları diziler gibi birden çok elemanı bir arada barındırdığı için tüm elemanlara ulaşmak için döngülerden faydalanırız. Yine yukarıdaki sözlük örneğimizden faydalanalım. Tanımladığımız sözlük listesinin anahtar ve değerlerini ekrana yazdırmak için aşağıdaki gibi bir döngü kurmalıyız.

1for k, v := range sozluk {
2	fmt.Println(k, ":", v)
3}

Map yapısı anahtar ve değer tanımlamada bize kolaylıklar sağlar. Ayrıca oldukça hızlı çalışan yapılardır. Ancak en önemli dezavantajı elemanları karışık olarak saklamasıdır. Yani eleman listesini alırken dizilerde olduğu gibi sizin eklediğiniz sırada gelmesini beklemeyin. Özellikle sıralamanı önemli olduğu durumlarda map yapısını kullanırken dikkatli olmalısınız.