القيم المرتجعة المتعدّدة
ميزة مميّزة في Go — شائعة لإرجاع نتيجة وخطأ:
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("القسمة على صفر")
}
return a / b, nil
}
result, err := divide(10, 2)
القيم المرتجعة المسمّاة
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return // يعيد x و y
}
المعاملات المتغيّرة (Variadic)
func sum(nums ...int) int {
total := 0
for _, n := range nums {
total += n
}
return total
}
sum(1, 2, 3, 4) // 10
الدوال كقيم والإغلاقات
// دالة تُمرّر كقيمة
apply := func(x int) int { return x * 2 }
apply(5) // 10
// إغلاق يحتفظ بالحالة
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
c := counter()
c() // 1
c() // 2
defer
يؤجّل التنفيذ حتى نهاية الدالة — مثالي لإغلاق الموارد:
func readFile() {
file, _ := os.Open("data.txt")
defer file.Close() // يُنفَّذ عند الخروج
// ... استخدام الملف
}
💡 عدّة
deferتُنفَّذ بترتيب عكسي (آخر واحد أولًا).
🎯 التالي: المؤشّرات (Pointers).