美文网首页
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