Go init函数

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

init函数会在main函数执行之前进行执行、init用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作。

如果一个包被多个地方引用,那么只有在这个包第一次被引用时,才会执行这个包里边的init函数,其他地方对包的再次引用,这个包里边的init函数不会被执行。

init 函数在包级别被定义,主要用于:

  • 初始化那些不能被初始化表达式完成初始化的变量
  • 检查或者修复程序的状态
  • 注册
  • 仅执行一次的计算
  • 更多其它场合

main.go中的内容是:

package main

import (
    "pk1"
    "pk2"
)

func main() {
    pk1.Pk1Demo()
    pk2.Pk2Demo()
}

pk1目录中的de1.go

package pk1

import (
    "fmt"
)

func Pk1Demo() {
    fmt.Println("pk1 demo")
}

func init() {
    fmt.Println("init. package is pk1")
}

pk2目录中的de2.go

package pk2

import (
    "fmt"
    "pk1"
)

func Pk2Demo() {
    fmt.Println("pk2 demo")
    pk1.Pk1Demo()
}

func init() {
    fmt.Println("init. package is pk2")
}

执行main函数,输出信息是:

init. package is pk1
init. package is pk2
pk1 demo
pk2 demo
pk1 demo

pk1包被两个地方引用,第一次引用是在pk2包中,第二次引用是在main包中。虽然pk1包被引用多次,但从程序的输出信息可知,pk1包中的init函数只执行了一次。


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

本文来自:51CTO博客

感谢作者:听砜

查看原文:Go init函数

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

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