آرایه‌ها، اسلایس‌ها، مپ‌ها و ساختارها در گولنگ

ایجاد شده توسط دکتر مصطفی جلیلی در آموزش برنامه نویسی گولنگ 8 آوریل 2025
اشتراک گذاری


آرایه‌ها، اسلایس‌ها، مپ‌ها و ساختارها در Go


در این بخش از آموزش زبان Go، با برخی از مهم‌ترین ساختارهای داده‌ای مانند آرایه‌ها، اسلایس‌ها، مپ‌ها و ساختارها آشنا می‌شویم. این مفاهیم پایه‌ای برای مدیریت داده‌ها در Go هستند و به شما امکان می‌دهند که داده‌ها رو به‌صورت مؤثر و بهینه ذخیره و پردازش کنید.




 آرایه‌ها و اسلایس‌ها


آرایه‌ها:


آرایه‌ها در Go یک مجموعه از داده‌های هم‌نوع هستند که طول ثابت دارند. بعد از تعریف یک آرایه، نمی‌توانید تعداد عناصر آن را تغییر دهید.


تعریف آرایه:


var arr [3]int = [3]int{1, 2, 3}

این آرایه سه عنصر از نوع int داره و شما نمی‌تونید تعداد عناصرش رو تغییر بدید. طول آرایه در زمان کامپایل ثابت می‌مونه.


اسلایس‌ها:


اسلایس‌ها مشابه آرایه‌ها هستند، اما می‌تونید طول آن‌ها رو تغییر بدید. اسلایس‌ها در واقع یک اشاره‌گر به یک بخش از یک آرایه هستند و بسیار انعطاف‌پذیرتر از آرایه‌ها عمل می‌کنند.


تعریف اسلایس:


var slice []int = []int{1, 2, 3, 4}

اسلایس برخلاف آرایه‌ها می‌تواند در طول برنامه تغییر کند.




 عملیات روی اسلایس‌ها


در Go می‌تونید عملیات مختلفی روی اسلایس‌ها انجام بدید، مثل افزودن، حذف، یا تغییر اندازه.


افزودن به اسلایس:


برای اضافه کردن داده‌ها به یک اسلایس، از append استفاده می‌کنیم:


slice := []int{1, 2, 3}
slice = append(slice, 4)

حذف از اسلایس:


برای حذف داده‌ها از اسلایس می‌تونید از اپراتورهای برش (slicing) استفاده کنید:


slice := []int{1, 2, 3, 4, 5}
slice = append(slice[:2], slice[3:]...) // حذف عنصر با ایندکس 2

تغییر اندازه:


اسلایس‌ها می‌تونند طول‌شون تغییر کنه بدون اینکه به حافظه اصلی دست بزنید:


slice := []int{1, 2, 3, 4, 5}
slice = slice[:3] // کاهش طول به 3



مپ‌ها (Map / Dictionary)


مپ‌ها یا دیکشنری‌ها ساختار داده‌ای هستند که به شما این امکان رو می‌دهند که داده‌ها رو با یک کلید (key) و مقدار (value) ذخیره کنید. این داده‌ها به صورت جفت‌های کلید-مقدار ذخیره می‌شن و دسترسی به هر عنصر سریع انجام میشه.


تعریف مپ:


var m map[string]int
m = make(map[string]int)

افزودن داده به مپ:


m["a"] = 1
m["b"] = 2

دسترسی به داده‌ها:


value := m["a"]
fmt.Println(value) // خروجی: 1

حذف داده از مپ:


delete(m, "a")

بررسی وجود کلید:


value, ok := m["b"]
if ok {
fmt.Println("مقدار وجود دارد:", value)
} else {
fmt.Println("کلید وجود ندارد")
}


ساختارها (Structs) و ترکیب آن‌ها



ساختارها در Go به شما این امکان رو می‌دهند که داده‌ها رو به‌صورت ترکیب‌شده (struct) ذخیره کنید. هر ساختار می‌تواند شامل چندین نوع داده مختلف باشد و برای ساخت داده‌های پیچیده‌تر بسیار مناسب است.


تعریف ساختار:


type Person struct {
Name string
Age int
}

در اینجا، ساختار Person دو فیلد به‌نام‌های Name و Age داره.


استفاده از ساختار:


var p Person
p.Name = "Ali"
p.Age = 30
fmt.Println(p) // خروجی: {Ali 30}

ترکیب ساختارها:


شما می‌تونید یک ساختار رو داخل ساختار دیگه استفاده کنید:


type Address struct {
City string
Country string
}
type Person struct {
Name string
Age int
Address Address
}



توابع گیرنده (Receiver Functions)


در Go، می‌تونید توابعی بنویسید که به‌طور خاص روی ساختارها (structs) عمل کنند. به این توابع، توابع گیرنده گفته می‌شه. این توابع می‌تونند داده‌های ساختار رو تغییر بدن یا با اون‌ها کار کنن.


تعریف تابع گیرنده:


type Person struct {
Name string
}
func (p *Person) SayHello() {
fmt.Println("سلام! من " + p.Name + " هستم")
}

استفاده از تابع گیرنده:


p := Person{Name: "Ali"}
p.SayHello() // خروجی: سلام! من Ali هستم

اینجا از *Person استفاده کردیم تا به‌صورت مستقیم روی ساختار داده‌های شخص تغییرات انجام بشه.



نظرات (0)

اشتراک گذاری

این پست را با دیگران به اشتراک بگذارید

تنظیمات GDPR

When you visit any of our websites, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and manage your preferences. Please note, that blocking some types of cookies may impact your experience of the site and the services we are able to offer.