Go init Function
In Go, the init function is a special function that is automatically executed before the main function when a package is initialized. It is primarily used for setup tasks, such as initializing global variables, opening database connections, or registering dependencies.
Key Characteristics of init Function:
-
No Arguments & No Return Value – The
initfunction does not take parameters or return values. -
Executed Automatically – It runs before
main()and does not require explicit invocation. -
Can Have Multiple
initFunctions – A package can have multipleinitfunctions, even across different files. -
Executed in Declaration Order – If multiple
initfunctions exist in a package, they are executed in the order in which they appear.
Example 1: Basic init Usage
package main
import "fmt"
func init() {
fmt.Println("Initializing...")
}
func main() {
fmt.Println("Main function running...")
}
Output:
Initializing...
Main function running...
✅ The init function runs before main().
Example 2: Using init for Global Variable Initialization
package main
import "fmt"
var config string
func init() {
config = "Application Configured"
fmt.Println("Configuring application...")
}
func main() {
fmt.Println(config) // Output: Application Configured
}
Example 3: init in Multiple Files
📌 If a package has multiple files, all init functions run before main(), in the order they appear.
File 1 (a.go)
package main
import "fmt"
func init() {
fmt.Println("Init from a.go")
}
File 2 (b.go)
package main
import "fmt"
func init() {
fmt.Println("Init from b.go")
}
Output (execution order is preserved):
Init from a.go
Init from b.go
Main function running...
Example 4: init in a Different Package
package utils
import "fmt"
func init() {
fmt.Println("Initializing utils package...")
}
func SayHello() {
fmt.Println("Hello from utils!")
}
Main File (main.go)
package main
import (
"fmt"
"your_project/utils"
)
func init() {
fmt.Println("Initializing main package...")
}
func main() {
fmt.Println("Main function running...")
utils.SayHello()
}
Output (Package-Level Execution Order)
Initializing utils package...
Initializing main package...
Main function running...
Hello from utils!
✅ The init function in imported packages runs before the init function in main.
When to Use init?
✅ Good Use Cases:
- Initializing global variables.
- Setting up logging configurations.
- Registering dependencies (e.g., database connections).
- Ensuring required setup before
main()runs.
❌ Avoid Using init for:
- Complex logic (prefer explicit initialization in
main). - Business logic (should be in
mainor other functions).
Summary
-
init()runs automatically beforemain(). - It has no parameters and no return values.
- Each package can have multiple
initfunctions. -
initin imported packages runs beforeinitinmain.
Top comments (0)