زبان برنامهنویسی گو/نقشهها (Maps)
| اسلایسها(Slices) | نقشهها (Maps) | ساختارها (Structs) |
| زبان برنامهنویسی گو |
نقشهها در زبان برنامهنویسی گو
نقشه (Map) یکی از ساختارهای داده در زبان برنامهنویسی گو است که برای ذخیرهسازی دادهها بهصورت **کلید-مقدار** (Key-Value) استفاده میشود. هر کلید باید یکتا باشد و به یک مقدار مرتبط است. نقشهها به دلیل سرعت بالای جستجو، حذف و درج دادهها، یکی از ابزارهای اصلی برای مدیریت مجموعههای داده در برنامههای گو هستند.
تعریف نقشه
برای تعریف نقشهها در زبان گو از کلمه کلیدی map استفاده میشود. نحوه تعریف نقشه به شکل زیر است:
map[کلید]مقدار
ایجاد نقشه
نقشهها را میتوان به سه روش اصلی ایجاد کرد:
ایجاد نقشه با استفاده از مقداردهی مستقیم
package main
import "fmt"
func main() {
// تعریف و مقداردهی اولیه نقشه
person := map[string]int{
"Ali": 30,
"Reza": 25,
"Sara": 27,
}
fmt.Println(person) // خروجی: map[Ali:30 Reza:25 Sara:27]
}
ایجاد نقشه با استفاده از تابع make
تابع make برای ایجاد نقشههای خالی استفاده میشود:
package main
import "fmt"
func main() {
// ایجاد نقشه خالی
person := make(map[string]int)
person["Ali"] = 30
person["Reza"] = 25
fmt.Println(person) // خروجی: map[Ali:30 Reza:25]
}
تعریف نقشه بدون مقداردهی
اگر نقشهای بدون مقداردهی اولیه ایجاد شود، مقدار اولیه آن nil خواهد بود و نمیتوان به آن مقدار اضافه کرد:
package main
import "fmt"
func main() {
var person map[string]int
fmt.Println(person == nil) // خروجی: true
}
عملیاتهای اصلی روی نقشه
عملیاتهای اصلی که میتوان روی نقشهها انجام داد عبارتند از:
افزودن یا بهروزرسانی مقادیر
برای افزودن یک مقدار جدید یا بهروزرسانی مقدار موجود از کلید استفاده میشود:
package main
import "fmt"
func main() {
person := make(map[string]int)
person["Ali"] = 30 // افزودن مقدار
person["Ali"] = 31 // بهروزرسانی مقدار
fmt.Println(person["Ali"]) // خروجی: 31
}
خواندن مقادیر
برای دسترسی به یک مقدار، کافی است کلید مربوطه را در نقشه فراخوانی کنید:
package main
import "fmt"
func main() {
person := map[string]int{"Ali": 30, "Reza": 25}
fmt.Println(person["Ali"]) // خروجی: 30
}
حذف مقادیر
برای حذف یک کلید-مقدار از نقشه، از تابع delete استفاده میشود:
package main
import "fmt"
func main() {
person := map[string]int{"Ali": 30, "Reza": 25}
delete(person, "Ali")
fmt.Println(person) // خروجی: map[Reza:25]
}
بررسی وجود یک کلید
برای بررسی اینکه یک کلید در نقشه وجود دارد یا خیر، میتوان از مقدار دوم که تابع نقشه بازمیگرداند استفاده کرد:
package main
import "fmt"
func main() {
person := map[string]int{"Ali": 30, "Reza": 25}
value, exists := person["Ali"]
if exists {
fmt.Println("Ali exists with value", value) // خروجی: Ali exists with value 30
} else {
fmt.Println("Ali does not exist")
}
}
پیمایش نقشه
برای پیمایش مقادیر موجود در نقشه از حلقه for استفاده میشود:
package main
import "fmt"
func main() {
person := map[string]int{"Ali": 30, "Reza": 25, "Sara": 27}
for key, value := range person {
fmt.Println(key, ":", value)
}
}
خروجی:
Ali : 30 Reza : 25 Sara : 27
ویژگیهای نقشه
- **کلیدها باید از نوع مقایسهپذیر باشند:** انواع دادهای مانند
string،int، وfloatبهعنوان کلید قابل استفاده هستند، اما انواع پیچیده مانندsliceیاmapقابل استفاده نیستند. - **مقدار پیشفرض برای کلیدهای ناموجود:** اگر کلیدی که وجود ندارد خوانده شود، مقدار صفر نوع داده (Zero Value) بازگردانده میشود:
package main
import "fmt"
func main() {
person := map[string]int{"Ali": 30}
fmt.Println(person["Reza"]) // خروجی: 0
}
جمعبندی نقشهها
نقشهها در زبان برنامهنویسی گو یکی از ساختارهای دادهای بسیار مفید برای ذخیرهسازی و مدیریت دادههای کلید-مقدار هستند. این نوع داده به شما اجازه میدهد تا بهصورت سریع و کارآمد به دادهها دسترسی داشته باشید، آنها را بهروزرسانی کنید یا حذف کنید. با استفاده از قابلیتهای نقشهها، میتوانید برنامههای قدرتمندی ایجاد کنید.