黄冈网站建设与推广哪家好,苏州网站建设技术,要建设一个网站需要什么,租房网站开发报告【Go】Go程序的执行顺序 大家好 我是寸铁#x1f44a; 总结了一篇Go程序的执行顺序的文章✨ 喜欢的小伙伴可以点点关注 #x1f49d; Go程序内容 go程序通常包含: 包、常量、变量、init()、main()等元素 下面从这几个方面分别去梳理#xff01;
包的执行顺序
程序中的包
…【Go】Go程序的执行顺序 大家好 我是寸铁 总结了一篇Go程序的执行顺序的文章✨ 喜欢的小伙伴可以点点关注 Go程序内容 go程序通常包含: 包、常量、变量、init()、main()等元素 下面从这几个方面分别去梳理
包的执行顺序
程序中的包
一个.go文件中其他的包只有被main包import才会执行按照import的先后顺序执行。被依赖的包的初始化顺序与其import顺序相反或者说按照**“深度优先”**的顺序执行例如导入顺序为main-A-B-C则初始化顺序为C-B-A-main 如下图所示避免出现循环import例如: A -- B -- C --A main包总是被最后一个初始化因为它总是依赖别的包。一个包被其他多个包依赖的包只会初始化一次。
包的内部
每个包内部按照常量变量init()函数的顺序进行初始化包内的init()函数按照出现次序自动调用 import、常量、变量、init()、main()
在同一个go文件中import、常量、变量、init()、main()依次进行初始化。 要了解init函数和main函数的执行顺序先要熟悉这两个函数的特点
init和main函数的特点
init()、main()是go语言中的保留函数 init函数的特点
init函数先于main函数自动执行不能被其他函数调用init函数没有输入参数、返回值每个包可以有多个init函数包的每个原文件也可以有多个init函数这点比较特殊同一个包的init执行顺序golang没有明确定义。不同包的init函数按照包导入的依赖关系决定执行顺序。
init和main函数的的区别
相同点
两个函数在定义时不能有任何的参数和返回值该函数只能由go程序自动调用不可以被引用
不同点
init函数可以应用于任意包中且可以重复定义多个。 补充 在同一个package中可以在多个文件中定义init函数在同一个go文件中可以重复定义多个init函数 main函数只能用于main包中且只能定义一个。 下面进入重头戏
init函数的执行顺序
对于同一个package中的不同文件将文件名按照字符串字典序从小到大进行排序之后按顺序调用各个文件中的init()函数。对于同一个文件的多个init ()函数按照在代码中编写的顺序依次执行不同的init 函数。 官方同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 面试时可以说虽然官方的说法是这样但是实际上运行时执行的顺序如上描述 对于不同的package如果不相互依赖的话按照main包中的import的顺序调用其包中的init() 函数。 如果package存在依赖调用顺序为最后被依赖的最先被初始化例如导入顺序main-A-B-C ,则初始化顺序为C-B-A-main,依次执行对应的init ()函数。 注意 所有init函数都在同一个goroutine内执行。 所有init函数结束后才会执行main.main函数。 面试官多个包 init 的执行顺序单个包多个 init 函数的执行顺序 init 函数的用途?
多个包init的执行顺序 对于不同的package如果不相互依赖的话按照main包中的import的顺序调用其包中的init() 函数。 如果package存在依赖调用顺序为最后被依赖的最先被初始化例如导入顺序main-A-B-C ,则初始化顺序为C-B-A-main,依次执行对应的init ()函数。
单个包多个init函数的执行顺序
对于同一个package中的不同文件将文件名按照字符串字典序从小到大进行排序之后按顺序调用各个文件中的init()函数。而对于同一个文件的多个init ()函数按照在代码中编写的顺序依次执行不同的init 函数。 官方同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 面试时可以说虽然官方的说法是这样但是实际上运行时执行的顺序如上描述 init函数的用途
init函数是用于程序执行前初始化包的函数比如初始化包里的全局变量等
初始化不能采用初始化表达式初始化的变量。程序运行前的注册。实现sync.Once功能。其他 看到这里的小伙伴恭喜你又掌握了一个知识点 希望大家能取得胜利坚持就是胜利 我是寸铁我们下期再见