企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
># init 函数 和 sync.Once - init函数是在文件包首次被加载的时候执行,且只执行一次 - sync.Onc是在代码运行中需要的时候执行,且只执行一次 >### 多个init执行顺序 - **单个文件内的 `init` 函数顺序**:如果在同一个文件中有多个 `init` 函数,它们按照在文件中出现的顺序依次执行。 - **多个文件内的 `init` 函数顺序**:如果一个包中有多个文件,并且每个文件都有 `init` 函数,文件内的 `init` 函数按照文件名的字典顺序依次执行。 - **包之间的 `init` 函数顺序**:如果包之间有依赖关系,先初始化被依赖的包,再初始化依赖包。换句话说,先执行导入的包的 `init` 函数,再执行导入者的 `init` 函数。 > ### sync.Once ~~~ package main import ( "fmt" "sync" ) var s1 sync.Once var s2 sync.Once func main() { s1.Do(SayHello) s1.Do(SayHello) //不会执行 sync.Once 保证每个 Do 方法只执行一次传入的函数 s2.Do(SayHello) } func SayHello() { fmt.Println("Hello World!") } ~~~