第三节 init函数和main函数

本文详细介绍了Go语言中的init函数和main函数的特点及使用场景。解释了init函数用于包初始化的过程,以及main函数作为程序入口的作用。此外,还探讨了两者之间的异同和执行顺序。

init函数

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

特征

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

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

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

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

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

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

main函数

Go语言程序的默认入口函数(主函数):func main() { }

init函数和main函数的异同

相同点:
两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:
init可以应用于任意包中,且可以重复定义多个。
main函数只能用于main包中,且只能定义一个。

两个函数的执行顺序

对同一个go文件的init()调用顺序是从上到下的。

对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。

对于不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init(),如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数。

如果init函数中使用了println()或者print()你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用。

### 包(Package) 在编程中,**包**(Package)是一种用于组织模块的结构。包对应于文件系统中的一个目录,并且在该目录中必须包含一个名为`__init__.py`的文件(在Python 3.3及以上版本中,这个文件可以省略)。包的主要作用是将相关的模块组织在一起,形成一个命名空间,从而避免模块名称的冲突。例如,在Python中,可以通过`import package_name.module_name`的方式导入包中的模块,这种方式使得代码的结构更加清晰、易于管理 [^1]。 ### 模块(Module) **模块**是Python中用于组织代码的基本单位。一个模块就是一个`.py`文件,其中可以包含函数、类、变量等定义。模块的主要作用是将代码逻辑分离到不同的文件中,从而提高代码的可重用性可维护性。通过使用`import`语句,可以在其他模块中引用该模块中的功能。例如,`import module_name`或`from module_name import function_name`等 [^2]。 ### `__init__`模块(Initialization Module) `__init__.py`是一个特殊的模块文件,用于初始化包。当一个目录被当作包使用时,该目录下必须包含`__init__.py`文件。这个文件的内容可以是空的,也可以包含包的初始化代码。`__init__.py`的一个常见用途是定义`__all__`变量,该变量指定了当使用`from package import *`时应该导入哪些模块。此外,`__init__.py`还可以用来执行一些初始化操作,例如设置包级别的变量或导入子模块 [^1]。 ### `__main__`函数Main Function) `__main__`函数并不是一个真正的函数,而是一个特殊的变量`__name__`,它用于表示当前模块的上下文。当一个Python脚本被直接运行时,其`__name__`变量会被设置为`"__main__"`。因此,通常会在模块的末尾添加如下代码: ```python if __name__ == "__main__": # 这里可以放置一些测试代码或主程序逻辑 ``` 这段代码的作用是判断当前模块是否是作为主程序运行,而不是被其他模块导入。如果是主程序运行,则执行其中的代码;否则,不执行。这种机制使得模块既可以作为独立的脚本运行,也可以作为模块被其他脚本导入并复用 [^2]。 ### 区别与总结 - **包**是一个包含多个模块的目录,用于组织模块并形成一个命名空间。 - **模块**是一个`.py`文件,用于封装函数、类变量,以便于代码的重用管理。 - **`__init__.py`模块**是包中的初始化文件,用于定义包的行为,例如设置`__all__`变量或执行初始化代码。 - **`__main__`函数**是一个条件判断语句,用于确定当前模块是否作为主程序运行,常用于模块的测试或主程序入口。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值