Go 小册
安装
官网
最快捷的方法就是去官网 https://golang.org/ 下载对应的安装包进行安装,不过官网偶尔会访问不了,因此,也可以通过镜像网站进行下载。
Go Module 加速镜像
以下是几个速度不错的提供者:
设置代理
类 Unix
1 |
|
确认一下:
1 |
|
Windows
1 |
|
基础 Go 命令
初始化
1 |
|
升级/降级依赖
查看所有可用版本:
1 |
|
方式一:
1 |
|
方式二:
1 |
|
删除依赖
go build
不会去删除依赖,因此需要 go mod tidy
对依赖进行整理。
1 |
|
使用 vendor
如果在内部网络不方便使用 Go Module 进行构建时,依旧可以使用 vendor 进行本地的依赖管理。可以通过以下命令创建 vendor:
1 |
|
如果我们要基于 vendor 构建,而不是基于本地缓存的 Go Module 构建,我们需要在 go build
后面加上 -mod=vendor
参数。
在 Go 1.14 及以后版本中,如果 Go 项目的顶层目录下存在 vendor 目录,那么 go build
默认也会优先基于 vendor 构建,除非你给 go build 传入 -mod=mod
的参数。
Go Module 构建模式
语义版本导入机制
语义版本号分成 3 部分:主版本号 (major)、次版本号 (minor)和补丁版本号 (patch)。
Go Module 规定:如果同一个包的新旧版本是兼容的,那么它们的包导入路径应该是相同的。
例如:v1.8.1能够兼容老版本的v1.8.0和v1.7.0,而v2.0.0的包根据语义版本的规则,则与v1.8.1和v1.7.0不兼容。
因而,我们可以同时依赖一个包的两个不兼容版本:
1 |
|
最小版本选择原则
在这张图中,myproject 有两个直接依赖 A 和 B,A 和 B 有一个共同的依赖包 C,但 A 依赖 C 的 v1.1.0 版本,而 B 依赖的是 C 的 v1.3.0 版本,并且此时 C 包的最新发布版为 v1.7.0。
其实,当前存在的主流编程语言,以及 Go Module 出现之前的很多 Go 包依赖管理工具都会选择依赖项的“最新最大 (Latest Greatest) 版本”,对应到图中的例子,这个版本就是 v1.7.0。
Go 会在该项目依赖项的所有版本中,选出符合项目整体要求的“最小版本”。这个例子中,C v1.3.0 是符合项目整体要求的版本集合中的版本最小的那个,于是 Go 命令选择了 C v1.3.0,而不是最新最大的 C v1.7.0。
Go 初始化顺序
Go 包的初始化顺序可以概括为以下三点:
- 依赖包从main开始按照”深度优先“的次序进行初始化
- 每个包内按照”常量->变量->init函数“的顺序进行初始化
- 每个包内的可以有多个init函数,按照从上往下的顺序进行自动调用