🐹 شرح Go

الدوال المتقدّمة و defer

القيم المرتجعة المتعدّدة

ميزة مميّزة في 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).