ساختارها (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 (فیلدها برابرند)

این مبحث بخشی از دوره آموزش کامل گو است.

ابزارهای مرتبط