Khi một package được nạp, Go khởi tạo theo thứ tự:
1. Các package được import khởi tạo trước (đệ quy) — mỗi package chỉ một lần.
2. Biến cấp package được gán, theo thứ tự phụ thuộc (không phải thứ tự viết): biến nào cần biến khác thì biến kia xong trước.
3. Tất cả hàm init() chạy, theo thứ tự file (được compiler đưa vào).
init() không tham số, không giá trị trả về, không gọi bằng tay được, và một package/file có thể có nhiều init. Với package main, toàn bộ init chạy xong rồi mới tới main().
go
var cfg = loadConfig() // (2) chạy trước init
func init() { // (3) sau khi biến package sẵn sàng
validate(cfg)
}