go语言包、变量、init初始化顺序

这篇具有很好参考价值的文章主要介绍了go语言包、变量、init初始化顺序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个完整的 go 语言可运行程序,通常会包含引用的包、变量、init 函数以及 main 函数几个部分。

包、变量、常量、init 函数以及 main 函数初始化顺序如下图所示:
go语言包、变量、init初始化顺序

在一个 go 语言程序中,初始化顺序规则如下:

  1. 引入的包
  2. 当前包中的变量、常量
  3. 当前包的 init 函数
  4. main 函数

初始化顺序说明:

  1. 在 go 源程序中,每一个被 import 的包,按照在源文件中出现顺序初始化。
  2. 如果当前包有多个 init 函数在不同的源文件中,则按照源文件名以字典序从小到大排序,小的先被执行到。准确来说,应是按提交给编译器的源文件名顺序为准,只是在提交编译器之前,go 命令行工具对源文件名按字典序排序了。
  3. 同一包且同一源文件中的 init 函数,则按其出现在文件中的先后顺序依次初始化。
  4. init 函数只可以由 go runtine 自己调用,我们在代码中不可以显示调用,也不可以被引用。
  5. 包 A 引入包 B,包 B 又引入包 C,则包的初始化顺序为: C -> B -> A。
  6. 引入包,必须避免死循环,如 A 引用 B, B 引用 C,C 引用 A。
  7. 一个包被其它多个包引入,如 A -> B ->C 和 H -> I -> C,C 被其它包引用了 2 次,但是注意包 C 只被初始化一次,被依赖的总是先被初始化。
  8. main包总是被最后一个初始化,因为它总是依赖别的包。

参考:编程宝库Go语言教程文章来源地址https://www.toymoban.com/news/detail-413208.html

到了这里,关于go语言包、变量、init初始化顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go语言数据初始化

    数据的声明: 初始化数组的初始化有多种形式。 [5] int {1,2,3,4,5} 长度为5的数组,其元素值依次为:1,2,3,4,5。 [5] int {1,2} 长度为 5 的数组,其元素值依次为:1,2,0,0,0 。 在初始化时没有指定初值的元素将会赋值为其元素类型 int 的默认值0,string 的默认值是 “”。

    2024年02月03日
    浏览(50)
  • go mod init 在初始化时出现 cannot determine module path for source directory (outside GOPATH,module path)

    新创建的golang项目,使用 go mod init 命令时出现 cannot determine module path for source directory xxxxxxx (outside GOPATH, module path must be specified) 这是因为go mod init 初始化项目时,需要定义一个 module ,当打开一个 go.mod 文件,就会发现第一行就有 因此,在执行 go mod init 时需要定义 module,如:

    2024年02月13日
    浏览(49)
  • 初始化一个Gin框架的Go-Web项目

    使用到的第三方库 gin Gin 框架 viper 配置文件管理 cors 跨域资源请求配置 gorm ORM 库 zap 日志记录 Go 语言程序的入口点 main.go 文件 使用 flag 读取配置文件路径参数,默认当前目录下 使用 viper 读取 config.ini 配置文件初始化初始数据 初始化随机数种子 初始化数据库 声明启动程序

    2024年02月09日
    浏览(55)
  • android系列-init 初始化日志

    1.FirstStageMain 2.InitKernelLogging  3.KernelLogger  4.OpenKmsg 

    2024年02月02日
    浏览(80)
  • 【C语言趣味教程】(4) 变量:代码注释 | 变量的声明 | 初始化与赋值 | 作用域与生命周期 | 局部变量与全局变量

      🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 引入:注释的作用 \\\"程序员最讨厌两种人:一种是不写注释的人,一种是让我写注释的人。\\\" 相信大家对注释早已有所耳闻,对于注释,C 语言有两种注释风格,我们下面会逐个讲解。   但在这之前,我们先来了解了解注释的作

    2024年02月15日
    浏览(49)
  • 【C语言趣味教程】(4) 变量:代码注释 | 变量的声明 | 初始化与赋值 | 变量的命名 | 关键字 | 标识符 | 变量名的命名规范

      🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 引入:注释的作用 \\\"程序员最讨厌两种人:一种是不写注释的人,一种是让我写注释的人。\\\" 相信大家对注释早已有所耳闻,对于注释,C 语言有两种注释风格,我们下面会逐个讲解。   但在这之前,我们先来了解了解注释的作

    2024年02月15日
    浏览(52)
  • kubeadm init初始化报错container runtime is not running

    在进行k8s部署时,kubeadm初始化出现如下报错 原因是:安装docker或者containerd之后,默认在/etc/containerd/config.toml禁用了CRI,需要注释掉disabled_plugins = [“cri”],否则执行kubeadm进行部署时会报错 注释完成后,重启containerd,并重新初始化

    2024年02月12日
    浏览(44)
  • Java之初始化顺序实践

    在创建Java对象时,需要将对象中的成员变量进行初始化后,才能调用对象的构造方法创建对象。本文中将会讲解初始化时父类与子类对应的顺序。 场景1:父类、子类的初始化顺序 用例代码 结果输出 结果分析 先初始化静态块:父类的静态块 - 子类的静态块。 再初始化非静

    2024年02月11日
    浏览(40)
  • react-Native init初始化项目报错”TypeError: cli.init is not a function“

    在react-native init appDemo 创建项目时,报错TypeError: cli.init is not a function。 产生这个问题的原因是:使用这种方式创建工程,react-native版本是0.69 版本上不适用。可以检查下自己安装的React-native的版本。 使用: npx react-native init Demo --version 0.68.2 即可。 解决方法不好用的话,那就

    2024年02月15日
    浏览(44)
  • kotlin 初始化变量

    2024年02月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包