نقشه‌ها (Maps)

ساختار داده کلید-مقدار در Go: تعریف، دسترسی، افزودن، حذف و بررسی وجود کلید.

نقشه (Map) چیست؟

Map مجموعه‌ای از جفت‌های کلید-مقدار است — مثل دیکشنری در Python یا آرایه انجمنی در PHP. هر کلید منحصربه‌فرد است و به یک مقدار اشاره می‌کند.

تعریف Map

// با make (رایج‌ترین)
ages := make(map[string]int)

// با لیترال
person := map[string]string{
    "name": "علی",
    "city": "تهران",
}

// خالی (nil — قبل از استفاده باید make شود!)
var m map[string]int   ← خطا هنگام نوشتن!

افزودن و خواندن

ages := make(map[string]int)

// افزودن
ages["علی"] = 25
ages["سارا"] = 30

// خواندن
fmt.Println(ages["علی"])    ← 25

// تغییر
ages["علی"] = 26

حذف کلید

delete(ages, "سارا")

بررسی وجود کلید (comma ok)

الگوی معروف Go برای تشخیص وجود کلید:

age, ok := ages["مریم"]

if ok {
    fmt.Println("سن مریم:", age)
} else {
    fmt.Println("مریم پیدا نشد!")
}
اگر کلیدی وجود نداشته باشد، مقدار صفر آن نوع برگردانده می‌شود (بدون خطا) — الگوی value, ok := تنها راه تشخیص «وجود نداشتن» از «مقدار صفر» است!

طول Map

fmt.Println(len(ages))   ← تعداد کلیدها

پیمایش Map

for key, value := range ages {
    fmt.Println(key, ":", value)
}
ترتیب پیمایش Map در Go تضمین نمی‌شود — هر بار ممکن است متفاوت باشد! اگر ترتیب مهم است، کلیدها را جداگانه مرتب کنید.

Map تو در تو

students := map[string]map[string]int{
    "علی": {"ریاضی": 18, "فیزیک": 16},
    "سارا": {"ریاضی": 20, "فیزیک": 19},
}

fmt.Println(students["سارا"]["ریاضی"])   ← 20

Map از Slice ها

groups := map[string][]string{
    "میوه‌ها": {"سیب", "موز"},
    "سبزیجات": {"هویج", "کرفس"},
}

این مبحث بخشی از دوره آموزش کامل گو است.

ابزارهای مرتبط