首頁 >後端開發 >Golang >Go 的 init() 函數如何進行包初始化?

Go 的 init() 函數如何進行包初始化?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-22 08:01:10491瀏覽

How Does Go's `init()` Function Work in Package Initialization?

Go 中的 Init():精確解釋

使用 Go 程式語言時,了解 init() 的原理非常重要函數運作。這個函數在套件及其依賴項的初始化過程中起著至關重要的作用。

正如Effective Go中提到的:

「init在套件中的所有變數聲明都評估了它們的初始化器之後被調用,並且只有在所有導入的套件都已初始化後來才會計算這些值。透過初始化變量,意味著評估它們的初始值設定項。

為了進一步闡明,請考慮以下場景:

在此範例中:
var WhatIsThe = AnswerToLife()

func AnswerToLife() int { // 1
    return 42
}

func init() { // 2
    WhatIsThe = 0
}

func main() { // 3
    if WhatIsThe == 0 {
        fmt.Println("It's all a lie.")
    }
}

AnswerToLife()將在 init() 之前呼叫。
  1. AnswerToLife() 將傳回 42 並將其指派給WhatIsThe.
  2. 然後將呼叫 init(),並將 WhatIsThe 重新指派為 0。
  3. 最後,將呼叫 main(),並列印「It's all a lie.」。
  4. 這說明AnswerToLife()會在init()之前執行,而init()會在init()之前執行 主要的()。此外,它強調了 init() 將在初始化所有套件的依賴項和變數之後執行所有初始化邏輯,例如設定變數值。

需要注意的是,init() 總是被調用,無論是否有 main() 函數。因此,如果導入包含 init() 函數的包,它將被執行。此外,一個套件可以有多個 init() 函數,它們將按照它們在檔案中出現的順序執行。

以上是Go 的 init() 函數如何進行包初始化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn