Go基础--包和模块
包和模块
一、概念
- 一个存储库(repository) 包含一个或多个模块(module)
- 模块是一起发布的相关Go包(package) 的集合
- 项目中的 依赖(Dependency),就是对其他模块的依赖(在go.mod中定义了模块的路径)
1.1.Package
pacakge的特点:
- Pacakge是同一目录中一起编译的源文件的集合
- 在一个源文件中定义的函数,类型,变量和常量对于同一包中的所有其他源文件可见
- 代码的package和所在的目录名称可以不一致
- 同一目录的Go代码的package要保持一致
1.2.Main Package
- 一个go程序以main包中的main函数为入口
- main包必须有main函数
- main函数无参无返回值
1.3.Package init方法
- 在main被执行前,所有依赖的package的init方法都会被执行
- 不同包的init函数按照包导入的依赖关系决定执行顺序
- 每个包可以有多个init函数
- 包的源文件也可以有多个init函数
1.4.go程序执行顺序
按顺序导入所有被 main 包引用的其它包,然后在每个包中执行如下流程
- 如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次(因此init方法只会执行一次)
- 然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数
- 在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序
在加载的时候,会自动梳理好依赖顺序(包括变量、导入的包)
1 |
|
二、go mod
2.1.go mod基本操作
1 |
|
2.2.go mod vendor
执行该命令后,会在本地生成一个vendor目录,可以把其他要修改的源码放在这个目录下自行维护