Go में init() फ़ंक्शन कब और किस क्रम में निष्पादित होता है?
सभी को नमस्कार! मैंने अभी-अभी 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
```