golang init函数

stevenlife · · 8630 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性,

有下面的特征:

1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等

2 每个包可以拥有多个init函数

3 包的每个源文件也可以拥有多个init函数

4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)

5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序

6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

下面的两个go文件演示了:

 1 一个package或者是go文件可以包含多个init函数,

 2 init函数是在main函数之前执行的,

 3 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义 

gprog.go代码

package main

import (
"fmt"
)

// the other init function in this go source file
func init() {
    fmt.Println("do in init")
}

func main() {
fmt.Println("do in main")
}

func testf() {
fmt.Println("do in testf")
//if uncomment the next statment, then go build give error message : .\gprog.go:19: undefined: init
//init()
}

ginit1.go代码,注意这个源文件中有两个init函数

package main

import (
"fmt"
)

// the first init function in this go source file
func init() {
fmt.Println("do in init1")
}

// the second init function in this go source file
func init() {
fmt.Println("do in init2")
}

编译上面两个文件:go build gprog.go ginit1.go

编译之后执行gprog.exe后的结果表明,gprog.go中的init函数先执行,然后执行了ginit1.go中的两个init函数,然后才执行main函数。

执行结果:

do in init
do in init1
do in init2
do in main

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:stevenlife

查看原文:golang init函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8630 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传