在Go語(yǔ)言中,init()
函數(shù)是一個(gè)特殊的函數(shù),用于初始化包或者初始化程序。每個(gè)包可以包含一個(gè)或多個(gè)init()
函數(shù),它們會(huì)在程序執(zhí)行之前自動(dòng)被調(diào)用。init()
函數(shù)沒(méi)有參數(shù)和返回值。
init()
函數(shù)的主要用途有兩個(gè):
初始化包:在包被導(dǎo)入的時(shí)候,init()
函數(shù)會(huì)自動(dòng)執(zhí)行,用于初始化包級(jí)別的變量、執(zhí)行一些初始化操作或者注冊(cè)一些需要在程序運(yùn)行之前進(jìn)行的邏輯。在一個(gè)包中,可以有多個(gè)init()
函數(shù),它們按照它們?cè)谠次募械捻樞蛞来螆?zhí)行。
初始化程序:在Go程序執(zhí)行時(shí),所有的包都會(huì)被自動(dòng)導(dǎo)入,并且每個(gè)包中的init()
函數(shù)也會(huì)被自動(dòng)執(zhí)行。這些init()
函數(shù)可以用來(lái)初始化程序級(jí)別的變量、執(zhí)行一些初始化操作或者注冊(cè)一些需要在程序運(yùn)行之前進(jìn)行的邏輯。
需要注意的是,init()
函數(shù)是在main()
函數(shù)運(yùn)行之前執(zhí)行的,所以它們之間沒(méi)有先后順序的關(guān)系。并且,如果一個(gè)包中有多個(gè)init()
函數(shù),它們的執(zhí)行順序是不確定的。
以下是一個(gè)示例代碼,展示了init()
函數(shù)的用法:
package main
import "fmt"
func init() {
fmt.Println("Initializing...")
}
func main() {
fmt.Println("Hello, world!")
}
輸出結(jié)果為:
Initializing...
Hello, world!