در این بخش از آموزش زبان 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
مپها یا دیکشنریها ساختار دادهای هستند که به شما این امکان رو میدهند که دادهها رو با یک کلید (key) و مقدار (value) ذخیره کنید. این دادهها به صورت جفتهای کلید-مقدار ذخیره میشن و دسترسی به هر عنصر سریع انجام میشه.
تعریف مپ:
var m map[string]intm = make(map[string]int)
افزودن داده به مپ:
m["a"] = 1m["b"] = 2
دسترسی به دادهها:
value := m["a"]fmt.Println(value) // خروجی: 1
حذف داده از مپ:
delete(m, "a")
بررسی وجود کلید:
value, ok := m["b"]if ok {fmt.Println("مقدار وجود دارد:", value)} else {fmt.Println("کلید وجود ندارد")}
ساختارها در Go به شما این امکان رو میدهند که دادهها رو بهصورت ترکیبشده (struct) ذخیره کنید. هر ساختار میتواند شامل چندین نوع داده مختلف باشد و برای ساخت دادههای پیچیدهتر بسیار مناسب است.
تعریف ساختار:
type Person struct {Name stringAge int}
در اینجا، ساختار Person دو فیلد بهنامهای Name و Age داره.
استفاده از ساختار:
var p Personp.Name = "Ali"p.Age = 30fmt.Println(p) // خروجی: {Ali 30}
ترکیب ساختارها:
شما میتونید یک ساختار رو داخل ساختار دیگه استفاده کنید:
type Address struct {City stringCountry string}type Person struct {Name stringAge intAddress Address}
در Go، میتونید توابعی بنویسید که بهطور خاص روی ساختارها (structs) عمل کنند. به این توابع، توابع گیرنده گفته میشه. این توابع میتونند دادههای ساختار رو تغییر بدن یا با اونها کار کنن.
تعریف تابع گیرنده:
type Person struct {Name string}func (p *Person) SayHello() {fmt.Println("سلام! من " + p.Name + " هستم")}
استفاده از تابع گیرنده:
p := Person{Name: "Ali"}p.SayHello() // خروجی: سلام! من Ali هستم
اینجا از *Person استفاده کردیم تا بهصورت مستقیم روی ساختار دادههای شخص تغییرات انجام بشه.