美文网首页
golang模块初始化

golang模块初始化

作者: xtg040601 | 来源:发表于2018-07-12 15:45 被阅读0次

    golang的进程初始化顺序是:

    1)先初始化依赖的模块,再初始化本模块

    2)模块内初始化按源文件字母序初始化

    3)源文件内先初始化全局变量,再调用init函数

    所以需要注意的是:当全局变量初始化时,可能依赖的模块并没有初始化完成,所以最好不要使用函数来初始化本模块的全局变量,可以将之放入到init函数中。

    ``` code main.go

    package main

    import (

        "fmt"

        "tmp/dep"

    )

    var a = initGlobal()

    func initGlobal() int {

        fmt.Println("initGlobal main.go")

        return 0

    }

    func main() {

        fmt.Println(a, dep.B, c)

    }

    func init() {

        fmt.Println("init() main.go")

    }

    ```

    ``` code c.go

    package main

    import "fmt"

    var c = initGlobalc()

    func initGlobalc() int {

        fmt.Println("initGlobal c.go")

        return 0

    }

    func init() {

        fmt.Println("init() c.go")

    }

    ```

    ``` code dep/b.go

    package dep

    import "fmt"

    var B = initGlobalb()

    func initGlobalb() int {

        fmt.Println("initGlobal dep")

        return 0

    }

    func init() {

        fmt.Println("init() dep")

    }

    ```

    xietaodembp:tmp xietao$ go build; ./testinitGlobal dep

    init() dep

    initGlobal c.go

    initGlobal main.go

    init() c.go

    init() main.go

    0 0 0

    相关文章

      网友评论

          本文标题:golang模块初始化

          本文链接:https://www.haomeiwen.com/subject/telrpftx.html