init() 函数是什么时候执行的?这个设计解决了什么问题?

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

请在评论区写下你的答案。

摈弃世俗浮躁,追求技术精湛
Summer
讨论数量: 2

Go 程序初始化先于 main 函数,由 runtime 初始化每个导入的包,初始化顺序不是按照从上到下的导入顺序,而是按照解析的依赖关系,没有依赖的包最先初始化。

每个包首先初始化包作用域的常量和变量(常量优先于变量),然后执行包的 init() 函数。同一个包,甚至是同一个源文件可以有多个 init() 函数。init() 函数没有入参和返回值,不能被其他函数调用,同一个包内多个 init() 函数的执行顺序不作保证。

  • 示例代码
    package main
    import "fmt"
    func init()  {
      fmt.Println("init1:", a)
    }
    func init()  {
      fmt.Println("init2:", a)
    }
    var a = 10
    const b = 100
    func main() {
      fmt.Println("main:", a)
    }
    // 执行结果
    // init1: 10
    // init2: 10
    // main: 10
    
    

一句话总结: import –> const –> var –> init() –> main()

2年前 评论

在导入数据库驱动包时其实就是使用到驱动包中init函数

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!