ساختارها (Structs)
تعریف و استفاده از Struct در Go: فیلدها، مقداردهی اولیه و struct های تو در تو.
Struct چیست؟
Struct مجموعهای از فیلدهاست که انواع مختلف داده را زیر یک نام گروهبندی میکند — معادل Class در زبانهای دیگر اما سادهتر و سبکتر:
تعریف Struct
type Person struct {
Name string
Age int
City string
}
ساخت نمونه (Instance)
// روش ۱: با نام فیلد (پیشنهادی)
p1 := Person{Name: "علی", Age: 25, City: "تهران"}
// روش ۲: به ترتیب فیلدها
p2 := Person{"سارا", 30, "شیراز"}
// روش ۳: خالی (مقدار صفر)
var p3 Person ← {"", 0, ""}
دسترسی به فیلدها
p := Person{Name: "علی", Age: 25}
fmt.Println(p.Name) ← علی
p.Age = 26 ← تغییر مقدار
fmt.Println(p.Age) ← 26
Struct تو در تو (Nested)
type Address struct {
City string
Country string
}
type Employee struct {
Name string
Address Address ← struct داخل struct
}
emp := Employee{
Name: "علی",
Address: Address{City: "تهران", Country: "ایران"},
}
fmt.Println(emp.Address.City) ← تهران
Struct با فیلد اختیاری
type Config struct {
Host string
Port int
Debug bool
}
// فقط برخی فیلدها مقداردهی میشوند — بقیه صفر
cfg := Config{Host: "localhost", Port: 8080}
fmt.Println(cfg.Debug) ← false
Struct ها مقداری هستند (Value Type)
کپی کردن struct، کپی مستقل میسازد — تغییر کپی، اصل را عوض نمیکند! برای اشتراک، از اشارهگر (
&p) استفاده کنید.p1 := Person{Name: "علی"}
p2 := p1 ← کپی!
p2.Name = "سارا"
fmt.Println(p1.Name) ← علی (تغییر نکرد)
fmt.Println(p2.Name) ← سارا
مقایسه Struct ها
a := Person{Name: "علی", Age: 25}
b := Person{Name: "علی", Age: 25}
fmt.Println(a == b) ← true (فیلدها برابرند)
این مبحث بخشی از دوره آموزش کامل گو است.