نقشهها (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{
"میوهها": {"سیب", "موز"},
"سبزیجات": {"هویج", "کرفس"},
}
این مبحث بخشی از دوره آموزش کامل گو است.