متى وبأي ترتيب يتم تنفيذ الدالة 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
```