golang模块初始化

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,480评论 1 24
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,857评论 0 6
  • 选择题 [primary] 下面属于关键字的是() A. func B. def C. struct D. cla...
    盘木阅读 1,848评论 0 29
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,889评论 0 38
  • 今天是家长节,没能参加深表遗憾!看到群里的热闹景象,虽然人不在担心已经去了!想想以前不上班有活动我都积极参...
    AA稳稳阅读 171评论 0 4