Avatar ·

متى وبأي ترتيب يتم تنفيذ الدالة init() في Go؟

مرحباً بالجميع! لقد بدأت للتو في تعلم Go وواجهت نقطة غير واضحة. في التوثيق مكتوب أنه يمكن تعريف الدالة `init()` في الحزم، والتي يتم تنفيذها تلقائياً. لكنني لا أستطيع فهم متى يتم تشغيلها وبأي ترتيب إذا كان هناك عدة دوال من هذا النوع. لدي مشروع صغير مكون من ثلاثة ملفات. في حزمة `main` قمت بتعريف دالة `init()` تطبع "main init". في ملف آخر من نفس الحزمة أعلنت عن دالة `init()` أخرى تزيد العداد. في الحزمة المستوردة `config` يوجد أيضاً دالة `init()` خاصة بها تقرأ الإعدادات. كنت أتوقع أن يتم تنفيذها بترتيب منطقي، لكن عند تشغيل البرنامج كان الناتج غير واضح. إليك مثال على الكود: ```go // main.go package main import "fmt" var counter int func init() { fmt.Println("First init in main") counter = 10 } func main() { fmt.Println("Main function, counter =", counter) } ``` ```go // extra.go (أيضاً package main) package main ```