توابع (Functions)
تعریف و فراخوانی توابع، پارامترها، مقادیر بازگشتی و چند مقدار بازگشتی.
تابع چیست؟
تابع بلوکی از کد است که کار مشخصی انجام میدهد و میتوان آن را بارها فراخوانی کرد. توابع کد را ماژولار، قابل استفاده مجدد و خوانا میکنند.
تعریف تابع
func greet() {
fmt.Println("سلام!")
}
func add(a int, b int) int {
return a + b
}
ساختار: func نام(پارامترها) نوعبازگشتی { }
فراخوانی تابع
func main() {
greet() ← فراخوانی بدون آرگومان
result := add(5, 3) ← با آرگومان
fmt.Println(result) ← 8
}
پارامترهای همنوع فشرده
// به جای: func add(a int, b int) int
func add(a, b int) int {
return a + b
}
چند مقدار بازگشتی (ویژگی فوقالعاده Go!)
Go میتواند چند مقدار برگرداند — رایجترین الگو: نتیجه + خطا:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, fmt.Errorf("تقسیم بر صفر")
}
return a / b, nil
}
result, err := divide(10, 2)
if err != nil {
fmt.Println("خطا:", err)
} else {
fmt.Println("نتیجه:", result)
}
الگوی
(result, error) قلب مدیریت خطای Go است — تقریباً هر تابع کتابخانه استاندارد از آن استفاده میکند!نادیده گرفتن مقدار بازگشتی
result, _ := divide(10, 2) ← خطا نادیده گرفته میشود (خطرناک!)
مقدار پیشفرض پارامتر؟
Go از مقدار پیشفرض پارامتر پشتیبانی نمیکند! راه جایگزین: پارامترهای variadic یا struct تنظیمات.
توابع بهعنوان مقدار
توابع در Go «شهروند درجه یک» هستند — میتوان آنها را به متغیر داد و پاس کرد:
func square(x int) int { return x * x }
f := square ← تابع در متغیر
fmt.Println(f(5)) ← 25
این مبحث بخشی از دوره آموزش کامل گو است.